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.