2016-09-21 11 views
1

산지 시간대와 애리조나를 구분하는 동안 (나는 둘 다 Mountain Time 임) 나는 GetNamesForTimeZone ("America/Phoenix", "en-us")이 일광을 반환했다는 것을 발견했다. 이름.TimeZoneNames 표준, 일광, 일반 용도

외부 코드 (노다 시간)를 사용해야 시간이 해당 시간대의 일광인지 알 수 있습니까? 아니면 영역에 일광 절약 시간제가없는 경우 TimeZoneNames 함수에서 알 수있는 방법이 있습니까?

동일한 메모에서 표준 대일 대신 표준 시간대 이름에 대해 "일반"이름을 사용하는 용도는 무엇입니까?

+0

https://github.com/mj1856/TimeZoneNames를 사용하고 싶습니까? 현재 귀하의 코드가 어떻게 생겼는지는 분명하지 않습니다. [mcve]가 도움이 될 것입니다. –

답변

2

내가 알 수있는 한, TimeZoneNames은 모두 시간대 이름 자체에 관한 것입니다. 표준 시간대 데이터 자체에 대해서는 전혀 알지 못합니다. 당신이 미국/피닉스는 현재 일광 절약을 관찰 여부를 알고 싶은 경우

, 나는 확실히 노다 시간 자체가 사용하십시오 :

// Usually pass in System.Clock.Instance as the clock... 
// or take an Instant instead. 
public bool IsCurrentlyObservingDaylightSavings(string id, IClock clock) 
{ 
    var zone = DateTimeZoneProviders.Tzdb[id]; 
    var now = clock.Now; 
    var zoneInterval = zone.GetZoneInterval(now); 
    return zoneInterval.Savings != Offset.Zero; 
} 

내가 아니라 ... 2.0에 DateTimeZone.InDaylightSaving(Instant) 방법을 추가 할 수 있습니다

+0

그게 내가 생각했던거야. 감사합니다 –

1

TimeZoneNames 라이브러리의 저자로서, 왜 이렇게되는지 설명 할 수 있습니다.

첫째, the CLDR metaZones.xml file

<timezone type="America/Phoenix"> 
    <usesMetazone mzone="America_Mountain"/> 
</timezone> 

다른 시간대의 America_Mountain metazone에 America/Phoenix지도는 같은 메타 영역에 또한 :

<timezone type="America/Denver"> 
    <usesMetazone mzone="America_Mountain"/> 
</timezone> 

그런 다음 각 CLDR 언어 파일에서 같은 the en.xml file을로 영어의 경우 현지화 된 문자열 인 America_Mountain 메타 존 항목이 표시됩니다.

<metazone type="America_Mountain"> 
    <long> 
     <generic>Mountain Time</generic> 
     <standard>Mountain Standard Time</standard> 
     <daylight>Mountain Daylight Time</daylight> 
    </long> 
    <short> 
     <generic>MT</generic> 
     <standard>MST</standard> 
     <daylight>MDT</daylight> 
    </short> 
</metazone> 

DST가 애리조나 주에서 적용 가능한지 여부는 CLDR에 정보가 없습니다. 애리조나는 과거에 실제로 DST를 가졌습니다 - last in 1967. 따라서 Noda Time에서 찾을 수있는 TZDB 데이터가 없으면 특정 시점에 DST가 유효한지 여부를 결정할 수 없습니다.

Jon's answer은 Noda Time을 사용하여 DST가 유효한지 테스트하는 방법을 보여줍니다. 결과를 얻었 으면 그에 따라 TimeZoneNames에서 표준 또는 일광 문자열을 선택할 수 있습니다.

일반 이름은 일반적으로 인간이 표준 시간대를 나타낼 때 일반적으로 사용되며 일광 시간 부분 또는 표준 시간 부분이 아닙니다. 이에 대한 한 가지 유스 케이스는 here과 같이 시간대 선택에 있습니다.

+0

감사합니다 Matt. TimeZoneNames 라이브러리에 대한 또 다른 질문이있는 경우 (상승 된 신뢰가 아닌 경우 Silverlight에서 오류가 발생 함) 어떤 태그를 사용하여보아야합니까? 아니면 TimeZoneNames의 github에 직접 게시해야합니까? 단지 당신이 그것에 대한 가시성을 가지고 있는지 확인하고 싶었습니다. Silverlight는 더 이상 지원되지 않으므로 고려하지 않을 수도 있습니다 (WPF와 Silverlight에는 공유 코드가 있음).하지만 나는 물어볼 것이라고 생각했습니다. –

+0

흠 .. 게시 해주세요. 내가 할 수있을 때 한번 볼게. 그래도 약속은 없습니다.:) –

+0

TimeZoneNames 라이브러리에 대한 git repo에서 문제로 기록됩니다. –