결론 : 타임스탬프는 64비트로 꼭 찍자.

 

2038 문제(2038년 1월이 되면 시간이 다시 초기화 되는 문제) 때문에

 

https://ko.wikipedia.org/wiki/2038%EB%85%84_%EB%AC%B8%EC%A0%9C

& 나무위키

유닉스 시간에 32비트 정수형을 쓰는 모든 컴퓨터의 시계가 UTC 0 기준으로 2038년 1월 19일 3시 14분 7초[1](대한민국 표준시 UTC+9 기준으로 2038년 1월 19일 12시 14분 7초)가 지나는 순간 음수값이 적용돼 1901년 12월 13일 20시 45분 52초나, 자동으로 오류를 감지하고 초기값인 0, 즉 1970년 1월 1일 0시 0분 0초로 돌아가게 되는 버그를 칭한다. 영어론 Year 2038 problem, Unix Millennium bug 등으로 표기한다.

원인은 프로그래머라면 알아야만 하는 오버플로 현상 때문이다.


안드로이드 스마트폰을 가지고 있다면 이 버그를 미리 체험해볼 수 있다. 단, 안드로이드 7.1.2 이하의 기기에서 재현이 되며 안드로이드 8.0 이후부터는 버그 재현이 불가능하다. 만약 안드로이드 7.1.2 버전 이하가 탑재된 기기의 경우 구글 캘린더로 일정을 2038년 1월 19일에 추가해 주면 추가된 날짜가 1970년으로 변한다.

단, 요즘은 7.1 이하의 일부 기기에서도 정상적으로 날짜 추가가 되는걸로 보아, 안드로이드 운영체제 자체의 문제가 아닌 구글 캘린더 자체의 문제로 판단되며, 현재는 구글이 캘린더 앱 자체를 수정한 것으로 보인다. 화웨이와 샤오미의 캘린더는 일정을 2037년 12월 31일까지만 설정할 수 있으며, Samsung Experience 8.1의 캘린더와 LG의 캘린더는 2036년 12월 31일까지 설정이 가능하다.

 

64비트로 

print(UInt64.max)

 

18446744073709551615

int64는

9223372036854775807

 

int64를 365일로 단순 계산하니

 

 

그래프를 그리려고 하니.

Double이 나은 듯.

3.4028235e+38

 

print(Double(UInt64.max))

1.8446744073709552e+19

19자리 보다는 38자리가 낫겠지.

 

64비트에서는 CGFloat과 Double 은 같으니 또 좋고.

'Blog History' 카테고리의 다른 글

개 발 일 지 024  (0) 2019.11.18
개 발 일 지 023  (0) 2019.11.18
개 발 일 지 021  (0) 2019.11.15
개 발 일 지 020  (0) 2019.11.13
개 발 일 지 018  (0) 2019.11.12

+ Recent posts