在夏令时自动将GMT转换为BST

时间:2016-12-20 08:53:46

标签: c#

我目前正在将当前系统时间转换为英国时间(GMT)。

DateTime currentSystemTime = DateTime.UtcNow;
TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
DateTime currentUKTime = TimeZoneInfo.ConvertTime(currentSystemTime, timeZoneInfo);

但似乎英国在3月至10月期间使用BST,而今年余下时间则使用GMT。如何在我的代码中处理此问题,以便在夏令时和GMT期间自动使用BST?

谢谢, Souvik

1 个答案:

答案 0 :(得分:0)

我相信当您提供时区信息时,DateTime对象已经自动处理了这个问题,但您最好使用方法 ConvertTimeFromUtc

您可以通过运行此代码进行检查,该代码会将某些UTC日期转换为GMT日期时间:

Dim tzi As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time")
Dim dt1 As DateTime = DateTime.Parse("01/01/2015 8:00")
Dim dt2 As DateTime = TimeZoneInfo.ConvertTimeFromUtc(dt1, tzi)

Dim dt3 As DateTime = DateTime.Parse("06/06/2015 8:00")
Dim dt4 As DateTime = TimeZoneInfo.ConvertTimeFromUtc(dt3, tzi)

Assert.IsFalse(dt2.IsDaylightSavingTime)  //January is not saving daylight
Assert.IsTrue(dt4.IsDaylightSavingTime)  //June is

dt2.ToString()  //This returns "01/01/2015 08:00:00"
dt4.ToString() //This returns "06/06/2015 09:00:00"

参考:https://msdn.microsoft.com/en-us/library/ms973825.aspx#datetime_topic6