64 비트 우분투 시스템의 타임 스탬프, 2038 년 문제


24

64 비트 Ubuntu 시스템을 사용하고 있습니다.

현재 MariaDB를 통합하는 프로젝트를 진행 중입니다. 사람들이 다른 시간대에 맞는 정확한 시간을 받도록 타임 스탬프 기법을 프로젝트에 도입 할 계획입니다.

타임 스탬프에 대한 2038 년 문제에 관한 기사를 듣고 읽었습니다. 많은 기사에서 64 비트 시스템을 사용하여“비트”를 더 많이 구매할 것을 제안합니다.

이“비트”는 얼마나 많은 시간을 의미합니까? 우리가 끝날 때까지 웹 응용 프로그램을 관리 할 수있을 정도로 길습니까? 그렇지 않은 경우 2 년 연장과 같은 것이므로 2040 년이되면 제대로 작동하지 않는 응용 프로그램을 갖게 될까요?


27
64 비트 time_t정수를 사용하는 64 비트 시스템 은 292,277,026,596 년 12 월 4 일 일요일 15:30:08까지 '비트'더 많은 시간을 제공합니다. 그것이 당신의 응용을 위해 충분히 길기를 바란다.;)
— Ron

4
그것은 당신에게 "비트"를 더주지 않습니다. 정확히 32 비트 더 제공합니다.
— user12205

5
64 비트 타임 스탬프는 이러한 스톱 갭 측정 중 하나입니다. 100,000,000,000,000 CE의 프로젝트 유토피아에서 일하는 사람들은 어떻습니까? 기능적인 컴퓨터 시스템도 필요합니다! 128 비트 타임 스탬프를 사용하면 우주의 반복뿐 아니라 많은 다른 시간에서 시간을 고유하게 식별 할 수 있습니다.
— Blacklight Shining

1
이 사이트에서 이전에 답변을받은 적이 없으므로 아래 답변 중 하나가 도움이 되었으면 텍스트 왼쪽의 회색 ☑ 을 클릭하는 것을 잊지 마십시오. 예,이 답변은 유효합니다 ! ;-)
— Fabby

답변:


34

문자 그대로 "비트"를 구매할 수있는 옵션, 즉 부호있는 32 비트 정수에서 부호없는 32 비트 정수로 전송하는 옵션이 있다면 2106으로 계속 작동합니다.

64 비트로 전송하는 것이 "약간 더 좋습니다". 당신은 수 천억 년의 해상도를 얻습니다.

그리고 우분투는 이것을합니다 :

$ uname -p
x86_64

$ date --date=9090-01-01 +%s
224685532800

그러나 이것이 OS 수준입니다. 우분투가 64 비트 정수를 사용한다고해서 MySQL / MariaDB가이를 사용 하여 타임 스탬프 를 저장 한다는 의미는 아닙니다 . 2038 년이 지난 날짜가 지금 중요하다면 즉시 테스트를 시작하십시오.

사실 시간을 절약 할 수 있습니다. 아직 고장 났어요 이 버그는 10 년 전에보고 되었지만 주요 테스트는 여전히 64 비트 int로 실패합니다.

mysql> select from_unixtime(2548990800);
+---------------------------+
| from_unixtime(2548990800) |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)

이것은 심지어 스토리지가 아닙니다. 약간 한심하다.

(예, MariaDB 버전 10.1에서 실행되었습니다)


8
10 년이 지난 지금도 22 년은 고쳐야합니다. <십자가 손가락> ...
— Mindwin

4
NB : 부호없는 32 비트 정수를 사용 하는 것은 핵 입니다.
— 케빈

6

정수로 저장하지 마십시오. ISO 8601 형식의 날짜 문자열 로 저장하십시오 . 인터넷에서 사용되는 표준 형식입니다.

9999-12-31T23:59:59+00:00

17
Year10K 버그에 유리를 올리 자! ;) 그러나 심각하게도 문자열은 실제로 확장 가능하지만 상대적으로 거대하고 (예 : 200 비트입니다!) 원시 숫자를 구문 분석하고 조작하는 것이 bazillion 배 빠릅니다. 중요합니다.
— Oli

6
이것은 표시하기에 적합한 형식입니다. 산술 등과 같은 다른 것들 (즉, 사용자에게 데이터를 형식화하기로 결정한 마지막 순간까지 데이터를 처리하는 것)의 경우 유닉스 타임 스탬프를 정수 (또는 float)로 사용하는 것이 훨씬 좋습니다.
— egmont

1
@Oli 실제로 중요한 경우 중요합니다. 이 시대는 UNIX 시대보다 오래된 경우에도 실패하지 않습니다. 이 형식은 프로토콜 및 API에서 인터넷 전체 날짜에 사용되는 표준입니다. MariaDB 열에 무언가를 저장하는 경우 실제로 디스크에 저장하는 방법입니다. 물론 메모리에 더 적절한 데이터 구조로 저장하고 싶을 수도 있습니다. 항상 UTC를 사용하면 마지막 40 비트가 필요하지 않습니다.
— dobey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.