주어진 국가/지역이 TimeZoneInfo 클래스를 사용하여 일광 절약 시간을 지원하는지 여부를 지정하는 방법은 없습니다. 내가 생각할 수있는 유일한 일에 대해일광 절약 시간제가 적용되지 않은 국가의 TimeZoneInfo 변환 처리 푸에르토 리코 및 일부 다른 국가에서는 일광 절약 시간제가 없습니다.
DateTime dt = DateTime.UtcNow;
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Atlantic Standard Time");
if (tz.IsDaylightSavingTime(dt))
Console.WriteLine("Daylight Savings");
는 사용자가 일광 절약을 위해 조정하고 대신 더 직접적인 TimeZoneInfo.ConvertTimeFromUtc 방법의 TimeZoneInfo.GetUtcOffset 사용 여부 또한 시간대 모두를 지정할 수 있도록하는 것입니다 .
if (tz.IsDaylightSavingTime(dt) && !supportsDaylightSaving)
{
var utcOffset = new DateTimeOffset(dt, TimeSpan.Zero).AddHours(-1);
var dt3 = utcOffset.ToOffset(tz.GetUtcOffset(utcOffset)).DateTime;
Console.WriteLine(dt3);
}
다른 방법을 고려해 볼까요? 위의 방법에 대해 나쁜 점이 있습니까?
DST 적합성은 지방의 정치적 결정입니다. 미국의 많은 다른 로케일을 따르지 않는 지역, 아메리칸 인디언 부족의 토지, 인디애나 및 애리조나의 카운티 등. 그런 지역의 로컬 PC 만이 사실을 알고 있습니다. TimeZoneInfo는 최상의 추측을 제공합니다. 이러한 종류의 함정을 피하려면 항상 UTC를 사용하십시오. –
합의 100 %, 한스 (Hans)이며 데이터는 UTC로 저장됩니다. 그러나 전시를 위해서는 현지 시간을 표시해야합니다. 나는 위에서 설명한 접근 방식이 사용자가 예외적 인 경우에 대해 알려주도록하기 때문에 최선의 방법이라고 생각하기 시작했습니다. (응용 프로그램은 MVC 응용 프로그램이므로 "Local"은 서버가 좋지 않습니다. 내가 참조 할 시간대). – danmiser
로컬 PC에 현지 시간을 표시하는 것이 결코 문제가 아니며 규칙을 알고 있습니다. 가능한 유일한 실수는 로컬이 아닌 PC에서 변환을하는 것입니다. 물론 웹 서버로 하여금 지역성을 인식하도록 강요하는 실수를 결코 저 지르지는 않을 것입니다. 그들은 서버 룸의 내부가 어떻게 보이는지 알 것입니다. –