2011-12-21 5 views
10

내 ASP.NET에서 아시아/다카 또는 GMT + 6 표준 시간대를 설정해야합니다. 그러나 전 세계적으로 그것을 바꿀 수있는 방법을 찾을 수 없습니다. Stackoverflow 및 나머지 시간대 정보를 얻고 DateTime 개체가 필요할 때마다 정확한 시간을 계산하여이 작업을 수행하는 많은 참조가 있습니다.asp.net 응용 프로그램의 표준 시간대를 변경하는 방법

하지만 믿어주세요. 나는 이런 식으로하고 싶지 않습니다. 그러니 나에게 그런 제안을하지 마라. 시간대를 아시아/다카 또는 GMT + 6 (web.config에서 선호)로 설정하고 싶습니다. (php.ini로 php에서와 비슷하게) DateTime 객체가 필요할 때마다 서버의 시간대가 무엇인지에 상관없이 시간이 내 시간대로 계산됩니다.

이것이 가능합니까? 가능하다면 어떻게? 솔루션에 미리 감사드립니다.

+4

은 * 왜 * 당신은 제대로 일을하고 싶지 않아? 'DateTime'은 고유의 시간대를 가지지 않는다는 것을 명심하십시오. (어떤면에서는 꽤 이상한 유형입니다.) 사용자가 갈 때 또는 사용자를 떠날 때 이외에는 항상 UTC로 모든 것을 유지해야합니다. (왜 그런 항상 그런 것은 아니지만) 그 공통 패턴을 따르고 싶지 않은 이유는 무엇입니까? –

+1

문제는 내가 100 datpx 페이지 이상의 많은 datetime 개체가 있으며 로컬 시간대에서 렌더링해야합니다. 나는 매번 UTC로 지키려고하지 않습니다. 하지만 모든 페이지를 변경하지 않고 aspx 페이지의 현지 표준 시간대 렌더링 시간을위한 솔루션이 필요합니다. –

+1

"DateTime"을 렌더링해야하는 모든 곳에서 * 호출 * 할 수있는 "DateTime"렌더링 코드를 넣는 것이 한 곳의 중심에 있습니다. 100 페이지를 모두 한 번 변경해야 할 수도 있지만, 렌더링 된 날짜/시간이 필요한 방식을 변경하면 한 곳에서 변경하면됩니다. –

답변

8

죄송합니다. .NET에서 표준 시간대를 변경하는 방법은 없습니다.

유일한 방법은 서버의 시간대를 변경하거나 모든 코드를 다시 작성하는 것입니다.

가장 좋은 방법은 전혀 시스템 시간대를 사용하지 않는 것입니다 (결코 DateTime.Now를 사용하지 마십시오).

모든 날짜를 Utc 날짜로 처리 한 다음 사용자에게 표시 할 때 특정 영역으로 변환해야합니다.

ASP.NET 응용 프로그램에서 시간대를 처리하더라도 SQL Server에 시간대가 있습니다 (예 : GETTIME 기능). 응용 프로그램이 완전히 UTC로 작성된 경우 SQL 서버 기능도 작동합니다.

TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 

그래서 ... 난 개인 TimeZoneInfo 중을 만듭니다

+0

세계화 설정은 대부분의 국가에서 많은 시간대를 갖기 때문에 DateTime 개체가 강조 표시되는 방식을 변경하지 않으므로 사용할 시간대를 알 수 없습니다. – davidsleeps

+1

제안 해 주셔서 감사합니다. 문화 구역에 따라 형식이 변경되는 것 같습니다. 그러나 시간 오프셋. 나는 모든 날짜를 utc로 처리하는 것에 동의하지만 표시 할 때마다 변환해야합니다. 내 응용 프로그램에는 이미 수백 개의 DateTime 개체가 있습니다. 나는이 모든 것을 찾아서 util 메소드로 하나씩 바꾸는 것 이외의 다른 방법을 찾고있다. : s : s –

+0

내 응용 프로그램에 대해 동일한 솔루션을 찾는 데 많은 도움이됩니다. 거의 동일한 질문이 http://stackoverflow.com/questions/14293858/how-to-set-default-time-zone-in-asp-net-application에서 요청됩니다. – Pravin

2

당신은 내가 지시에 문제가있는 날짜

DateTime utcTime = DateTime.UtcNow; 
    TimeZoneInfo myZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 
    DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone); 
    Str.Append(custDateTime.ToString()); 
1

... 시간대를 변경하고 얻을 수 있습니다.

여기에 내 코드

...

public static DateTime DateNow() 
     { 
      DateTime utcTime = DateTime.UtcNow; 
      TimeZoneInfo myZone = TimeZoneInfo.CreateCustomTimeZone("COLOMBIA", new TimeSpan(-5, 0, 0), "Colombia", "Colombia"); 
      DateTime custDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, myZone); 
      return custDateTime; 
     } 
관련 문제