2013-11-14 2 views
1

그냥 이것을 확인하려면 : 나는 현재 위치에 대한 표준 시간대 오프셋을 계산하는이 절름발이 및 뇌가 죽은 방법이 있습니다. Day Light Saving 시간이되면 (현재 우리는 내 위치, CET 시간대에 Winter Time이 있으므로 확인하기가 어렵습니다) 조정해야하는지 궁금합니다.org.joda.time | 일광 절약 시간 (DST) 및 로컬 시간대 오프셋

// The local time zone's offset 
private int getLocalOffset() { 
    DateTimeZone defaultZone = DateTimeZone.getDefault(); 
    return defaultZone.getOffset(null)/1000/60/60; 
} 

어떤 힌트를 주셔서 감사합니다.

+0

당신은 오프셋 로컬 영역을 나타내는 시간에 int를 사용하면 안됩니다. 많은 장소에는 실제 30 분의 오프셋이 있습니다 (예 : 인도). 당신은 당신의 int로 그것을 표현할 수 없었습니다. joda 시간은 수 밀리 초를 나타내는 이유가 있습니다. – LordOfThePigs

+0

그게 좋은 생각입니다. 나는 거의 잊어 버렸다. –

답변

1

일반적으로, Joda 시간은, 그 자체로 DST의 처리됩니다. 그러나, 나는 당신이 null을 getOffset()에 전달한다는 것을 알아 차렸다. 표준 시간대 오프셋이 날짜에 따라 달라 지므로 실제로 오프셋을 계산하는 날짜/시간을 전달해야합니다. 그렇지 않으면 잘못된 결과가 표시됩니다. 내 이전 의견에 했나요로 또한

: 일부 시간대는 그 시간의 전체 숫자가 아닌 상쇄주의하십시오. 30 개

0

네, 괜찮습니다. 옳은지 확인하려면 - DateTime 개체에 null pass를 DateTimeZone.getOffset으로 전달하는 대신 DST가 적용되는 여름에 언젠가 datetime을 설정합니다. 오프셋 값이 변경되어야합니다. 당신이 그것에 대해 걱정하지 않아도

4

시간대 및 일광 절약 시간은 악몽 : 인도는 예를 들어 GMT +5이다. 당신은 분명이 일을 직접해서는 안됩니다. Joda-Time이 무거운 짐을 들게하십시오.

Using Joda time to get UTC offset for a given date and timezone, 비슷한 질문에 this answer를 참조하십시오. DateTimeZone 클래스는 getOffset() 메소드를 제공합니다.

자바 7 Joda 타임 2.3

예제 소스 코드 ...

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 

org.joda.time.DateTimeZone californiaTimeZone = org.joda.time.DateTimeZone.forID("America/Los_Angeles"); 

org.joda.time.DateTime now = new org.joda.time.DateTime(californiaTimeZone); 
int millisecondOffsetToAddToUtcToGetLocalTime = californiaTimeZone.getOffset(now); 

System.out.println("millisecondOffsetToAddToUtcToGetLocalTime: " + millisecondOffsetToAddToUtcToGetLocalTime); 

// Note the casting to doubles to avoid integer truncation. Time zone offsets are NOT always whole hours. 
System.out.println("Offset in decimal hours: " + (double)millisecondOffsetToAddToUtcToGetLocalTime/1000d/60d/60d); 

2013-11-20T01에서 실행하는 경우 : 03 : 56.464-08 : ... 00

millisecondOffsetToAddToUtcToGetLocalTime: -28800000 
millisecondOffsetToAddToUtcToGetLocalTime in hours: -8.0 

중요 해당 숫자 서식 -8.0은 오프셋에 대해이 잘못되었습니다. 콜론과 두 자릿수 (영 선도 패딩)와

  • -08:00 :이어야합니다.
  • -08 앞에 0이옵니다.
관련 문제