我試圖解釋引起日光節約時間的變化,看起來像這樣一些過時的代碼時間的變化:使用的TimeZoneInfo類佔夏令時
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
for (int i = 1; i <= 31; i++)
{
DateTime dt = new DateTime(1960, 3, i, 0, 0, 0);
Console.WriteLine(dt.ToUniversalTime());
}
Console.WriteLine();
for (int i = 1; i <= 30; i++)
{
DateTime dt = new DateTime(1960, 4, i, 0, 0, 0);
Console.WriteLine(dt.ToUniversalTime());
}
Console.ReadKey();
}
}
}
通過此代碼迭代1960年3月和4月的日期並打印日期時間。 但是,這並沒有正確解釋1960年的時間變化,我相信因爲時間變化的日期不同。我試圖用TimeZoneInfo類來解決這個問題。我改變了代碼如下:
class Program
{
static void Main(string[] args)
{
for (int i = 1; i <= 31; i++)
{
DateTime dt = new DateTime(1960, 3, i, 0, 0, 0);
var tz = TimeZoneInfo.Local;
var utcOffset = new DateTimeOffset(dt, TimeSpan.Zero);
//use timeZoneInfo class to account for dlst offset
Console.WriteLine(utcOffset.ToOffset(tz.GetUtcOffset(utcOffset)));
}
Console.WriteLine();
for (int i = 1; i <= 30; i++)
{
DateTime dt = new DateTime(1960, 4, i, 0, 0, 0);
var tz = TimeZoneInfo.Local;
var utcOffset = new DateTimeOffset(dt, TimeSpan.Zero);
//use timeZoneInfo class to account for dlst offset
Console.WriteLine(utcOffset.ToOffset(tz.GetUtcOffset(utcOffset)));
}
Console.ReadKey();
}
}
不幸的是,這是打印出來:
這表明夏令時下午4點4月3日發生變化,而應該在四月切換24日凌晨2點,我錯過了什麼來正確解釋夏令時?
編輯: 我目前的時區是東部。
這是非常* *很難回答這個不知道你在說什麼時區。另外請記住,Windows的時區概念並不總是與TZDB相同。 –
我的時區是東部的,但會影響到1960年應用夏令時的日期嗎? – Christian
@Christian,對,時區的DST規則不同。甚至有時區是規則是沒有規則只是一個任意選擇的日期。 –