web-dev-qa-db-ja.com

夏時間が有効かどうかを確認しますか?

デンマークで夏時間の節約が実施されているかどうかを確認する方法、ある場合は、データに1時間を追加しますか?私はxmlファイルを持っています:

<day = "1"
month = "5"
sunrise ="06:30"
sunset ="21:30"
/>
30
Megaoctane

この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);
66
Eugene

上記のようにコーディングした場合-ニューヨークの場合、デバッガーで時刻が正しく設定されていることがわかりました(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;

    }
7
Meir Schreiber

TimeZoneInfo.IsDaylightSavingTime を使用できます

DateTime theDate = new DateTime(2012, 5, 1); // may 1st
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
bool isCurrentlyDaylightSavings = tzi.IsDaylightSavingTime(theDate);
6
Matthew

これはすべてのタイムゾーンで使用できる私の短いソリューションです:

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;
}
0
Marc

次の2つのことを行う必要があります。

  1. IsAmbiguousを呼び出します
  2. リストアイテム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

0
B.W

重要

myDateTime.IsDaylightSavingTimeは適切な値を返しますが......少なくとも1日の時間まで正確であり、日付を渡すだけでは十分ではありません。

たとえば、myDateTimeとして渡される今年(2019)3/10/2019 02:00:00はfalseを返しますが、3/10/2019 03:00:00はtrueを返します。

0
HellFyr

これは一般的なテストであり、数学が正しくない場合は修正できます。私の場合、世界のどこにいてもタイムゾーンの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で機能します。

0
timv