4

GMT タイムゾーンの Xamarin Studio (v4.0.12 - Mono 3.2.3) で次のコードを実行しています...

var utcDateTime = new DateTime(1970, 07, 15, 15, 00, 00, DateTimeKind.Utc);
string utcTimeString = utcDateTime.ToLongTimeString();
string localTimeString = utcDateTime.ToLocalTime().ToLongTimeString();

...しかし、両方の変数が値「3:00:00 PM」を返します。

.NET 4.0 で同じコードを実行すると、2 番目の変数は "4:00:00 PM" になります。これは私が期待するものです。

何が欠けているのかわかりませんが、これは両方で同一ではありませんか?

「ToLocalTime()」から返される DateTime は、「Kind」が「Local」になっていることを除いて、オリジナルと同じように見えます。

アップデート:

これは間違いなく上の例の年に関連しています。現在の年が入力された場合、時刻は異なります (そして正確です)。1970 年より前が入力された場合、タイムゾーンは無視されます。

これは、 http://msdn.microsoft.com/en-us/library/system.timezone.currenttimezone.aspxのコードに基づく私のタイムゾーン情報のコピーです。

Standard time name:           GMT
Daylight saving time name:    BST

Current date and time:        2013-10-02 09:27
Daylight saving time?         True
Coordinated Universal Time:   2013-10-02 08:27
UTC offset:                   01:00:00

Daylight saving time for year 1970:
0001-01-01 00:00 to 0001-01-01 00:00, delta: 00:00:00

1970
7/15/1970 3:00:00 PM
7/15/1970 3:00:00 PM

2005
7/15/2005 3:00:00 PM
7/15/2005 4:00:00 PM

Now
10/2/2013 8:27:09 AM
10/2/2013 9:27:09 AM
4

4 に答える 4

1

この回避策の拡張方法を試してください

public static class DateTimeExtensions
{
    public static DateTime ToLocalTimeX(this DateTime dateTime)
    {
        var info = TimeZoneInfo.Local;
        return dateTime.Add(info.BaseUtcOffset.Add(TimeSpan.FromHours(info.IsDaylightSavingTime(DateTime.Now) ? 1 : 0)));
    }
}
于 2014-09-26T13:21:50.060 に答える
0

夏までにはお休みのようです。

GMT は UTC とほぼ同じです (GMT は太陽ベースであり、UTC は原子時計ベースです) が、どちらにも夏時間がないため、すべての意図と目的で同一である必要があります。

問題は、Windows マシンで GMT を使用していない可能性がありますが、代わりに他のサマータイム対応のタイムゾーンを使用している可能性があります。

于 2013-10-01T21:13:19.570 に答える