불행히도 현재로서는 표준 기능이 없습니다.
TimeZoneInfo.FindSystemTimeZoneById() 메서드의 작동 방식을 리플렉터를 사용하여 확인합니다. 그냥 s_systemTimeZones 필드의 값 중 하나를 취합니다
private static Dictionary<string, TimeZoneInfo> s_systemTimeZones
{
get
{
if (s_hiddenSystemTimeZones == null)
{
s_hiddenSystemTimeZones = new Dictionary<string, TimeZoneInfo>();
}
return s_hiddenSystemTimeZones;
}
set
{
s_hiddenSystemTimeZones = value;
}
}
이 필드를 저장 가능한 모든 TimeZoneInfo 중-들. FindSystemTimeZoneById (id)를 호출하면 미리 채워진 사전에서 값을 가져 왔습니다. 이 사전이 초기화 될 때 및 초기화에 사용되는 값을 언제 알 수 없습니다.
가장 확실한 방법은 마이크로 소프트 \ 윈도우 NT를 \ CurrentVersion \ 시간대는 HKEY_LOCAL_MACHINE \ SOFTWARE \ 자신의 사전 사전을 생성하고 값을 입력한다 : 그러나 this thread에서 사람은 TimeZoneInfo 중이 레지스트리 값을 사용하는 것이 말했다. 이 같은 것은 :
Dictionary<string, TimeZoneInfo> dictionary = new Dictionary<string, TimeZoneInfo>();
TimeZoneInfo info = new TimeZoneInfo("ID", new TimeSpan(0, 1, 0, 0), "SomeCultureName", "Some Standard Time", "Some Daylight Time", null, true);
dictionary.Add("Some time", info);
그러나 또 다른 문제가 있습니다. TimeZoneInfo 생성자가 private입니다. 따라서 FindSystemTimeZoneById() 및 ConvertTimeFromUtc() 기능을 사용하려면 매우 처음부터 구현해야합니다. 표준 시간대를 나타내는 클래스를 만들고,이 클래스의 사전을 생성하고 채우십시오.
별로 좋은 소식이 없습니다. 그러나 나는 ... 당신이
사람이 스레드에 걸쳐 실행되는 경우
흠. 나는 실제로 IANA 다운로드를 사용하지 않았다 - 우리는 네트워크상의 가장 가까운 리눅스 컴퓨터에서/etc/zoneinfo의 내용을 복사했다. IANA 파일은 텍스트 형식이므로 시간대 컴파일러 ("zic")를 통해 실행해야합니다. "zic"소스도 같은 IANA 페이지에 있습니다. 하지만 바이너리를 사용하려면 리눅스 컴퓨터가 있다면이 바이너리를 사용하는 것이 더 쉽습니다. –
다음은 [GitHub의 버전]입니다 (https://github.com/mono/mono/tree/master/mcs/class/System.Core/System). –