2011-09-27 3 views
2

레지스트리를 사용하거나 OS 시간대를 변경하지 않고 .NET CLR의 기본 표준 시간대를 변경하고 싶습니다. 방법이 있습니까?레지스트리를 사용하지 않고 .NET CLR 표준 시간대 변경

편집 :.NET CLR은 OS와 다른 기본 시간대 (JVM과 달리)를 지원하지 않는 것 같습니다.

TimeZoneInfo timeZoneInfo = TimeZoneInfo.Local; 
Console.Out.WriteLine("timeZoneInfo = {0}", timeZoneInfo); 

나는이 시간과 함께 .NET GUI를 실행하는 것입니다하고 싶은 이유 : 내 OS의 시간대가 아닌 다른 뭔가를 반환하는이 문을 싶습니다 즉

내 컴퓨터 (시카고)의 시간대가 아닌 내 사용자 (런던)의 당신이 할 수없는,

-Duser.timezone="Europe/Berlin" 

따라서, 예를 들어, 당신이 원하는 경우 DateTime.Now가 다른 시간대를 반환 :

예를 들어, 명령 줄에 추가하여 Java 런타임의 시간대를 변경할 수 있습니다 DateTime.Now에 대한 모든 참조를 변경하지 않고 처음부터 피하려고했던 것입니다.

+0

CLR은 무엇을 의미합니까? CLR은 * 런타임 *입니다. –

+0

로컬 시간대를 사용하지 않으려면'TimeZoneInfo.Local'을 사용하지 마십시오 ... –

+0

[.net을 사용하여 Windows2k8의 시간대 설정을 변경하는 방법] 가능한 복제본 (http://stackoverflow.com)/question/3408055/how-to-change-the-timezone-setting-of-windows2k8-with-net) – Aamir

답변

1

시간대 설정에 대해 다른 결과를 얻으려고하는지 묻지 만 기본적으로 다른 시간대에서 시간을 가져 오는 데 관심이 있다고 가정합니다.

.NET Framework는 UTC, 로컬 및 시간대가없는 일반 시간 값을 지원합니다. DateTimeKind 열거 형을 참조하십시오.

시간 값을 다룰 때는 보통 내부적으로 모든 것을 UTC로 사용하고 사용자와 상호 작용할 때 특정 영역으로 변환합니다.

질문에 대답하기 위해 다른 표준 시간대에 반환 된 현지 시간을 얻는 유일한 방법은 컴퓨터의 표준 시간대를 변경하는 것입니다.

그런데 원하는 효과를 얻으려면 UTC로 시간을 가져 오는 유틸리티 클래스를 작성한 다음 구성 매개 변수를 사용하여 반환하기 전에 오프셋을 저장할 수 있습니다.

+0

다음 두 가지 이유로 좋은 생각은 아닙니다. a) 실행중인 다른 프로세스에 영향을 줄 수 있습니다. (같은 시스템의 SQL Server에서 IIS에서'DateTime.Now'와 getdate()를 상상해보십시오.) b) 현재 시간에 대한 시간대 정보 만 고려합니다. 시간대에 대한 규칙은 시간이 지남에 따라 변경되므로 표준 시간대 정보는 실제로 표준 시간대 정보를 보려는 날짜의 함수입니다. – casperOne

+0

@casperOne - 그래, 나는 그것이 좋은 생각이 아니라는 것을 안다. 그러나 그것이 내가 할 수 있다는 것을 아는 유일한 방법이다. –

+0

대안을 보려면 [내 답변] (http://stackoverflow.com/questions/7568864/change-net-clr-time-zone-without-using-registry/7569086#7569086)을 참조하십시오. 시간대 정보를 처리하기 위해 [tz database] (http://www.twinsun.com/tz/tz-link.htm)를 사용하여 큰 성공을 거두었으며 [TimeZone 클래스] (http : //)를 무시했습니다. msdn.microsoft.com/en-us/library/system.timezone.aspx)를 몇 년 동안 완전히 사용했습니다. – casperOne

0

표준 시간대 정보를 제공하기 위해 CLR/프레임 워크를 사용하는 대신 표준 시간대로 작업 할 때 외부 정보 소스를 사용해야합니다.

public info time zone database (tz or Olson database라고도 함)을 사용하는 것이 좋습니다. 그것이 100 %의 정확도를 주장하지는 않지만, 나는 그것을 사용해야하는 모든 것에 대해 정확하다는 것을 발견했습니다.

이 데이터베이스를 구문 분석 할 수있는 .NET 클래스가 있습니다 (예 : ZoneInfo (tz database/Olson database) .NET API). 바이너리 배포판이 없다는 것을주의하십시오. latest version을 다운로드하여 직접 컴파일해야합니다.

이 라이브러리를 사용하면 찾고있는 지역의 원하는 시간대 (ZoneInfo 개체로 표시됨)를 찾아서 DateTime을 사용하여 다양한 기능을 수행 할 수 있습니다 (예 : UTC 해당 날짜의 오프셋, 현재 현지 시간, UTC 시간 가져 오기 등).

참고로.NET API IMO에서 날짜 정보를 제공해야합니다. 다양한 지역에서 시간이 지남에 따라 UTC 오프셋에 관한 규칙이 변경되었으며 ZoneInfo API와 함께 tz 데이터베이스가 해당 기록을 정확하게 나타내고 결과를 정확하게 산출합니다.

2009 년 이후 API에 변경 사항이 없다는 점에 대해 걱정할 필요가 없습니다. 이 글을 쓰는 시점에서 현재 최신 데이터 distarbition의 모든 파일을 구문 분석합니다 (실제로 2011 년 9 월 25 일에 ftp://elsie.nci.nih.gov/pub/tzdata2011k.tar.gz 파일에 대해 실행 - 2017 년 3 월에 ftp://ftp.iana.org/tz/releases/tzdata2017a.tar.gz에서 검색).

관련 문제