현재 시각을 utc 기준으로 1970년 1월 1일 0시 0분 0초로부터 경과된 시간을 구하고 싶습니다. 이럴 때 timestamp 함수를 쓸 수 있습니다.

 


 이 함수는 POSIX timestamp를 float 형태로 돌려줍니다.

 

 datetime.now(timezone.utc)는 현재 시각을 utc 타임존 정보를 붙여서 리턴해 줍니다. 여기에 timestamp 메서드를 붙였는데요. 이렇게 되면, 1970년 1월 1일 0시 0분 0초부터 경과된 시간을 초 단위로 돌려주게 됩니다.

 

 1679064828.282969초가 지났다고 하는군요. 만약에 그 이전의 날짜를 넣으면 어떻게 리턴될까요?

 

 utc 기준으로 1900년 3월 1일 9시는 1970년 1월 1일 0시 이전의 시간입니다. timestamp로 한 번 출력해 보았습니다.

 

 -2203858800이 나옵니다. 기준 시간보다 무려 22억초 정도 전의 시각이란 것입니다. 한 쪽은 datetime이고 다른 한 쪽은 타임스탬프 형식일 때 둘 중 한 쪽을 변환해야 합니다. 저는 보통 이럴 때 datetime을 timestamp로 변환하는 쪽을 택하는 편입니다.

 


 그러면 이 timestamp를 다시 datetime으로 바꾸는 방법은 없을까요?

 

 먼저 fromtimestamp는 posix timestamp로부터 datetime을 만드는 함수입니다.

 

 1970년 1월 1일 0시로부터 경과된 초를 5번째 줄에서 출력합니다. 다음에, fromtimestamp로, timestamp 정보와 타임존 정보를 받아, datetime으로 변환합니다. timezone.utc로 받았으니, 타임존은 utc다라는 정보까지 넣어버립니다. 출력 결과를 볼까요?

 

 그랬더니 2023년 3월 17일 14시 59분 38초 +00:00이 나옵니다. 그런데, 다른 방법도 있습니다. 어짜피 timestamp는 utc 시각으로 1970년 1월 1일 0시부터 몇 초만큼 경과되었는지를 나타낸 것입니다. 그러니, timedelta를 이용해서 하는 방향도 나쁘지 않습니다.

 

 

 위 코드를 보면, fromtimestamp(0, tz=timezone.utc)로 timestamp가 0초인 utc 시간을 얻어옵니다. 다음에, timedelta로 16억초를 더하기 했는데요. 그러면 해당 시각으로부터 16억초 지난 시각이 나오게 됩니다.

 

  결과를 보니, 2020년 9월 13일이 나오는군요.