我认为您需要使用DateTimeOffset
and TimeZoneInfo
。本文可以帮助您,特别是使用 DateTimeOffset 值的比较和算术运算部分的第二个代码片段。
您可以在该代码中看到他们在夏令时向 DateTimeOffset 实例添加小时数,并且结果考虑了时间变化。
编辑:下面的代码取自上面提到的文章(代码没有做你想要的,但表明DateTimeOffset
使用的TimeZoneInfo
是考虑夏令时:
public static void Main()
{
DateTime generalTime = new DateTime(2008, 3, 9, 1, 30, 0);
const string tzName = "Central Standard Time";
TimeSpan twoAndAHalfHours = new TimeSpan(2, 30, 0);
// Instantiate DateTimeOffset value to have correct CST offset
try
{
DateTimeOffset centralTime1 = new DateTimeOffset(generalTime,
TimeZoneInfo.FindSystemTimeZoneById(tzName).GetUtcOffset(generalTime));
// Add two and a half hours
DateTimeOffset centralTime2 = centralTime1.Add(twoAndAHalfHours);
// Display result
Console.WriteLine("{0} + {1} hours = {2}", centralTime1,
twoAndAHalfHours.ToString(),
centralTime2);
}
catch (TimeZoneNotFoundException)
{
Console.WriteLine("Unable to retrieve Central Standard Time zone information.");
}
}
// The example displays the following output to the console:
// 3/9/2008 1:30:00 AM -06:00 + 02:30:00 hours = 3/9/2008 4:00:00 AM -06:00