デンマークで夏時間の節約が実施されているかどうかを確認する方法、ある場合は、データに1時間を追加しますか?私はxmlファイルを持っています:
<day = "1"
month = "5"
sunrise ="06:30"
sunset ="21:30"
/>
このxmlをDateTimeに変換し、TimeZoneInfoクラスを使用する必要があると思います。
デンマークの現地時間の場合:
DateTime thisTime = DateTime.Now;
bool isDaylight = TimeZoneInfo.Local.IsDaylightSavingTime(thisTime);
それ以外の場合は、デンマークのタイムゾーンを取得する必要があります。
DateTime thisTime = DateTime.Now;
// get Denmark Standard Time zone - not sure about that
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Denmark Standard Time");
bool isDaylight = tst.IsDaylightSavingTime(thisTime);
上記のようにコーディングした場合-ニューヨークの場合、デバッガーで時刻が正しく設定されていることがわかりました(DSTを含む)
TimeZoneInfo nyTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime nyTime = GetLocalDateTime(DateTime.UtcNow, nyTimeZone);
if (nyTimeZone.IsDaylightSavingTime(nyTime))
nyTime = nyTime.AddHours(1);
public static DateTime GetLocalDateTime(DateTime utcDateTime, TimeZoneInfo timeZone)
{
utcDateTime = DateTime.SpecifyKind(utcDateTime, DateTimeKind.Utc);
DateTime time = TimeZoneInfo.ConvertTime(utcDateTime, timeZone);
return time;
}
TimeZoneInfo.IsDaylightSavingTime を使用できます
DateTime theDate = new DateTime(2012, 5, 1); // may 1st
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
bool isCurrentlyDaylightSavings = tzi.IsDaylightSavingTime(theDate);
これはすべてのタイムゾーンで使用できる私の短いソリューションです:
DateTime utcTime = DateTime.Parse("30.10.2018 18:21:34")
DateTime localtime = ConvertUTCToLocalTime(utcTime);
public static DateTime ConvertUTCToLocalTime(DateTime UTCTime)
{
var localZone = TimeZone.CurrentTimeZone;
var offset = localZone.GetUtcOffset(UTCTime);
var localTime = UTCTime.AddHours(offset.Hours);
return localTime;
}
次の2つのことを行う必要があります。
IsAmbiguous
を呼び出しますIsDaylightSavingTime
。if (TimeZoneInfo.Local.IsAmbiguousTime(unclearDate) || TimeZoneInfo.Local.IsDaylightSavingTime(unclearDate)) Console.WriteLine("{0} may be daylight saving time in {1}.", unclearDate, TimeZoneInfo.Local.DisplayName);
https://msdn.Microsoft.com/en-us/library/bb460642(v = vs.110).aspx
重要
myDateTime.IsDaylightSavingTimeは適切な値を返しますが......少なくとも1日の時間まで正確であり、日付を渡すだけでは十分ではありません。
たとえば、myDateTimeとして渡される今年(2019)3/10/2019 02:00:00はfalseを返しますが、3/10/2019 03:00:00はtrueを返します。
これは一般的なテストであり、数学が正しくない場合は修正できます。私の場合、世界のどこにいてもタイムゾーンのGMTオフセットを取得する必要がありました。
int timezone;
TimeZoneInfo localZone = TimeZoneInfo.Local;
DateTime myTime = DateTime.Now;
bool isDayLight = TimeZoneInfo.Local.IsDaylightSavingTime(myTime);
if (isDayLight)
timezone = Math.Abs(localZone.BaseUtcOffset.Hours) + 1;
else
timezone = Math.Abs(localZone.BaseUtcOffset.Hours);
Debug.WriteLine("timezone is " + timezone);
現在の時刻を見つけただけで、それが夏時間の期間であれば、GMTオフセットに+1を追加しました。
これはVisual Studio Express 2013で機能します。