有没有办法检查它是否是UTC的DST(夏令时),而不使用转化?
我不想使用转化,因为它在10月28日凌晨2点不明确。这样:
using System;
namespace Rextester
{
public class Program
{
public static void PrintSeasonKindTime(DateTime utcDate)
{
// Convert dt to Romance Standard Time
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
DateTime localDate = TimeZoneInfo.ConvertTime(utcDate, tzi);
Console.WriteLine("Local date: " + localDate.ToString("yyyy.MM.d HH:mm:ss") + (tzi.IsDaylightSavingTime(localDate) ? " is summer" : " is winter"));
}
public static void Main(string[] args)
{
DateTime currentUTCDateTime = new DateTime(2018,10,27,23,59,0, DateTimeKind.Utc);
double nbMinutes = 1.0;
PrintSeasonKindTime(currentUTCDateTime);
PrintSeasonKindTime(currentUTCDateTime.AddMinutes(nbMinutes));
}
}
}
将显示:
Local date: 2018.10.28 01:59:00 is summer
Local date: 2018.10.28 02:00:00 is winter
我希望以下显示:
Local date: 2018.10.28 01:59:00 is summer
Local date: 2018.10.28 02:00:00 is summer
由于时间更改是在指定时区的当地时间2018.10.28 03:00:00而不是凌晨2点(请参阅此处enter link description here)。
然而,这种行为是模棱两可的"因为在10月28日凌晨2点两次是正确的;一次是在UTC时间00:00(夏令时间凌晨2点)和凌晨1点(冬天凌晨2点)。你有什么想法吗?
答案 0 :(得分:5)
只需使用TimeZoneInfo.IsDaylightSavingTime
,传入您的UTC DateTime
值即可。这将有效地将该UTC值转换为给定的时区,并检查结果是否在夏令时中,尽管它是否实际执行了该转换或只是检查它是否 在夏令时是另一回事。
请注意,这绝不是模棱两可的,因为UTC值永远不会模糊不清。
TimeZoneInfo.IsDaylightSavingTime
在您感兴趣的时区2018-10-28T00:00:00Z之后返回true
。
答案 1 :(得分:2)
从UTC获取夏令时是不可能的,因为它是UTC - 检查UTC描述here
您需要当前时区。有了这些信息,您可以使用TimeZoneInfo.IsDaylightSavingTime来确定当前TimeZone当前是否在DST中。
如果要存储数据服务器端(例如web),则应始终尝试获取用户时区并转换为UTC。