2012-06-26 5 views
3

시간대 정보가없는 연중 무휴 정보를 저장해야합니다.타임 스탬프를 날짜와 요일을 다른 날짜로 변환합니다.

private static void test() { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTimeZone(TimeZone.getTimeZone("US/Pacific")); 
    System.out.println("Before: " + cal.get(DAY_OF_MONTH)); 
    // 
    long datestamp = toDatestamp(cal.getTimeInMillis()); 
    long timestamp = toTimestamp(datestamp); 
    cal.setTimeInMillis(timestamp); 
    System.out.println("After: " + cal.get(DAY_OF_MONTH)); 
} 

private static long toTimestamp(long datestamp) { 
    return TimeUnit.DAYS.toMillis(datestamp); 
    // return datestamp * DS_MULT; 
} 

private static long toDatestamp(long timestamp) { 
    return TimeUnit.MILLISECONDS.toDays(timestamp); 
    // return timestamp/DS_MULT; 
} 

// hours * minutes * seconds * milliseconds 
private static long DS_MULT = 24 * 60 * 60 * 1000; 

주석 중 하나가이 개 방식을 가진 :
는 여기에 몇 가지 코드입니다. 그러나 결과는 동일합니다.

Before: 26 
After: 25 

변환 후 날짜가 변경되는 이유는 무엇입니까? 나는 명백한 것을 놓치고 있는가?

+0

DAY_OF_MONTH 무엇

당신은 시험의 끝에서 또 다른 라인을 추가하여 볼 수 있습니까? 정의 된 부분은 어디입니까? – alfasin

+0

그건'import static java.util.Calendar.DAY_OF_MONTH;' – yanchenko

+0

당신의 질문이 무엇인지, 그리고 코드로 무엇을 달성하려고하는지 더 명확하게 설명해 주시겠습니까? – Tom

답변

4

일로 변환하고 다시 밀리 초로 변환하면 해당 날짜의 자정까지 달력을 효과적으로 다시 설정합니다. 그러나 밀리 초 단위로 시간을 설정하면 UTC 시간 (GMT와 대략 동일)으로 해석되므로 자정으로 자정으로 재설정됩니다. UTC. "US/Pacific"시간대에는 UTC의 음수 오프셋이 있기 때문에 이전 날로 나타납니다.

cal.setTimeZone(TimeZone.getTimeZone("UTC")); 
System.out.println("UTC: " + cal.get(DAY_OF_MONTH)); 

그리고 당신은 볼 수 :

UTC: 26 
관련 문제