2009-11-11 2 views
3

다른 비슷한 질문이 있다는 것을 알고 있지만 특정 시간대에서 현재 시간을 얻는 방법을 생각해 냈습니다. 그래서 그것이 맞는지 아닌지를 확인하고 싶었습니다. 돌봐주지 마.Java : 특정 시간대의 Calendar 객체로 현재 시간을 가져 오는 올바른 방법입니까?

Calendar cal = Calendar.getInstance(); 

// Assuming we want to get the current time in GMT. 
TimeZone tz = TimeZone.getTimeZone("GMT"); 
cal.setTimeInMillis(calendar.getTimeInMillis() 
        + tz.getOffset(calendar.getTimeInMillis()) 
        - TimeZone.getDefault().getOffset(calendar.getTimeInMillis())); 

// Calendar should now be in GMT. 

위의 내용이 정확합니까? 나는 내 자신의 테스트를했고 예상대로 작동하는 것처럼 보였지만 Stack Overflow의 전문가들과 다시 한 번 확인하고 싶었습니다.

+3

정확히 무엇이 필요합니까? 기본적으로 Calendar 내의 timeInMillis 값은 GMT의 Epoch 이후이므로 항상 timeInMillis 및 GMT offset을 사용하여 계산할 필요가 없습니다. 특정 TimeZone에서 (Calender.get()을 사용하여 날짜 또는 시간과 같은) 값을 가져와야하는 경우 calendar.setTimeZone()을 통해 TimeZone을 설정 한 다음 해당 시간대와 관련된 값을 가져옵니다. 표시 목적으로 만 DateFormat에서 직접 TimeZone을 설정할 수도 있습니다. –

답변

7

Calendar.getInstance을 TimeZone 인수와 함께 사용하면 get() 메서드에 대한 일정의 내부 상태가 해당 시간대의 시간 필드를 반환합니다. 예를 들면 : 당신은 단지 표시 목적으로 로컬 시간을 필요로하는 경우

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
    // if i run this at 9 EST this will print 2 
    System.out.println(cal.get(Calendar.HOUR)); 

, 당신은 당신의 형식 개체에 TimeZone을 설정할 수 있습니다. 예를 들면 다음과 같습니다.

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss z"); 
    sdf.setTimeZone(TimeZone.getTimeZone("GMT")); 
    System.out.println(sdf.format(new Date())); 

Macarse와 마찬가지로 Joda 시간은 더 복잡한 작업이 필요한 경우입니다. Java date API는 악몽입니다.

1

대신 joda-time을 사용하는 것이 좋습니다.

체크 this link을 확인하십시오.

+0

물론, 나는 joda-time에 관해 많은 훌륭한 것들을 들었다. 그러나 나는 현재 Sun의 Java가 제공하는 것으로 제한되어있다. 그러나 어쨌든 고마워, 가까운 장래에 나는 확실히 그것을 줄 것이다. – His

관련 문제