41

デンマークで夏時間が有効になっているかどうかを確認する方法。有効になっている場合は、データに1時間を追加します。そうでない場合は、追加しますか?私はxmlファイルを持っています:

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

8 に答える 8

85

この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);
于 2012-05-19T14:24:11.287 に答える
9

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

    }
于 2013-08-08T09:36:10.853 に答える
6

TimeZoneInfo.IsDaylightSavingTimeを使用できます

DateTime theDate = new DateTime(2012, 5, 1); // may 1st
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
bool isCurrentlyDaylightSavings = tzi.IsDaylightSavingTime(theDate);
于 2012-05-19T14:24:02.210 に答える
0

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

于 2014-03-13T00:21:22.707 に答える
0

あなたは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

于 2017-04-27T21:22:59.497 に答える
0

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

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;
}
于 2019-01-18T15:13:25.897 に答える
0

重要

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

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

于 2019-03-08T21:19:35.317 に答える
0

上記の他のコードに基づいて、実行およびテストを行うための完全なコードを作成しました。変数cityTzは、IANAタイムゾーン名の例を受け取っています。IANAタイムゾーンパターンはMacとLinuxで使用されます(Windowsは異なるタイムゾーンスタイルを使用します)。2020年、ニューヨークの夏時間(DST)は11月1日に終了します。以下のコードをテストすると、「theDate」はDSTの終了の翌日の11月2日であるため、戻り値はFALSEになります。ただし、コメント化された行を変更し、日付を11月1日(ニューヨークの最後のDST日付)に設定すると、戻り値はTRUEになります。

このプログラムは、MacまたはLinuxのターミナル入力でコンパイルできます。

csc testDST.cs

プログラムを実行するには:

mono testDST.exe

完全なコード:

using System;
using System.Collections.Generic;
using System.Linq;

class Program{
    static void Main(string[] args)
    {
        string cityTz;

        //cityTz = "America/Sao_Paulo";
        cityTz = "America/New_York";

        //DateTime theDate = new DateTime(2020, 11, 1); //returns TRUE
        DateTime theDate = new DateTime(2020, 11, 2); //returns FALSE

        Console.WriteLine("Data: "+theDate);

        TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(cityTz);
        bool isDaylight = tzi.IsDaylightSavingTime(theDate);

        Console.WriteLine("isDaylight this date in "+ cityTz +"?: "+ isDaylight);
    }
}
于 2020-09-15T01:34:32.550 に答える