2013-07-18 3 views
0

매우 이상한 문제가 있습니다. 다음 코드를 작성했습니다 :이상한 자바 동작 시간

public static final long ONE_DAY_IN_MS = 86400000L; 

public static long getTimeOfTheDayInMs() { 
    return System.currentTimeMillis() % ONE_DAY_IN_MS; 
} 

이것은 자정 이후로 밀리 초를 반환해야합니까? 자정 이후로 시간을 반환하므로 1 시간 미만을 반환하므로 예, 아니오입니다. 왜 그럴까요? 이 코드가 필요한 이유 :

System.out.println(new Date(System.currentTimeMillis())); 
System.out.println(new Date(getTimeOfTheDayInMs())); 

18-jul-2013 12.34.03 
1-jan-1970 11.34.03 
나는 또한이 문제를 30 행군 나타날 것으로 보인다는 것을 발견

1992

다른 사람 광산과 같은 문제가? 누군가 왜 나를 설명 할 수 있을까요? 사전에

감사합니다,

PS :이 문제는 내 Windows PC에서 내 안드로이드 태블릿 모두에서 저를 나타납니다. 난 당신의 코드를 실행하면

+1

일광 절약 시간제를 사용하셨습니까? – Kayaman

+1

시간대를 고려 했습니까? 캘린더 (또는 Joda Dates와 같은 타사 API)를 사용하려면 – Guillaume

+0

안녕하세요. 사실, 당신 말이 맞아요. 내가 어떻게 해? – MMauro

답변

1

내가

Thu Jul 18 12:33:53 CEST 2013 
Thu Jan 01 11:33:53 CET 1970 

를 얻을 즉 차이가 여름 - 시간 이동이다 (CEST 중앙 유럽 여름 시간, CET는 유럽 중심 (겨울) 시간 즉, GMT + 1).

0

시간대 변경, 일광 절약 시간제 변경 등으로 인해 발생할 수 있습니다. 프로덕션 코드에서 Date 클래스를 사용하지 말 것을 강력히 권합니다. Calendar 또는 더 나은 Joda Time을 사용하십시오.

DateMidnight midnight = new DateMidnight(); 
    DateTime now = new DateTime(); 
    Duration duration = new Duration(midnight, now); 
    int seconds = duration.toStandardSeconds().getSeconds(); 
관련 문제