currentTimeMillis() 함수의 비밀

System Class
public static long currentTimeMillis();

표준시간(협정 세계시 (UTC))와의 사이에 발생하는 차이로, 즉, UTC 1970년 1월 1일 00:00:00.000 을 기준으로한 현제 시간의 차이를 long형으로 반환한다.

즉, 이 long값을 잘 이용하면, 여러가지로 유용하게 사용할수 있을듯 합니다. 즉, Date 형태나, time형태로 변환을 하지않아도 값에서, 1000을 나누면, 단위는 sec가 되고,

다시 60을 나누면, miminute단위가 되며..

단, 주의할 사항은, 기준시가, UTC로 영국에 있는 그리니치 천문대라는 것입니다. 즉 경도상의 차이로 영국과 우리나라의 시간차이는, 9시가 난다는것입니다.

예로, long값을 갖고, 시간을 다 빼고, 날짜까지의 값을 갖기위하여서는, 밀리세컨->세컨->분->시간->일 로 변환을 해야합니다. 즉, /1000/60/60/24 의 계산과정이 들어갑니다.

System.currentTimeMillis()/1000/60/60/24 이런 식이 나올것입니다.

그러나, 여기서 주의할점이, 위것은 기준이, 영국 기준입니다. 어차피 시간이 무슨상관이 있을까요? 상관이 있습니다. 날짜가 변할소지가 있기때문이죠..
우리가 흔히 볼수있는 시간을 나타내주는 내부처리는

  1. 먼저 long의 값을 얻습니다. [System.currentTimeMillis()]

  2. 나라마다의 시간차를 적용합니다 [System.currentTimeMillis()+9시간] – Date등 함수 내부처리

  3. 년/월/일/시/분/초 로 계산합니다. – Date등 함수 내부처리

이런 처리가 될것입니다. 그럼 이제 주의 사항을 아시겠죠?
만약, 9시간 처리를 안해주고 잘라버리게 되면, 새벽 1시의 값이랑, 밤 9시 값이 차이가 생기겠죠?

밤9시에는, 9시간이 더해지면, 날이 다음날로 가야하는데, 미리 시간을 잘라버니면, 날짜가 변경될수 없기 때문이죠..

그래서, 이럴때는,

new Date((((System.currentTimeMillis()/1000/60/60+9)/24))24-9)60601000);

이런 처리로 해주어야 하죠..

TimeMillis로 시간을 바꿔서 시간계산하게끔 하는데, 시간이 오차가 생겨서 검색 해보니 역시나… TimeMillis이 표준시로 바꾸기 때문에 계산후 다시 우리나라 시간에 마춰 줘야 하네요..

결론은, 우리나라는 UTC+09:00이므로 32400000밀리세컨드초를 더해줘야 합니다.

 

댓글 남기기