繁体   English   中英

有没有办法检查它是否是UTC的夏令时(夏令时)?

[英]Is there a way to check if it's DST (Daylight Saving Time) with UTC?

有没有办法检查它是否是UTC的夏令时(夏令时), 而不使用转换

我不想使用转换,因为它在2月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点(请在此处输入链接说明 )。

然而,这种行为是“含糊不清”的,因为它是10月28日凌晨2点两次; 一次是在UTC时间00:00(夏令时间凌晨2点)和凌晨1点(冬天凌晨2点)。 你有什么主意吗?

只需使用TimeZoneInfo.IsDaylightSavingTime ,传入您的UTC DateTime值。 这将有效地将该UTC值转换为给定时区并检查结果是否在夏令时中,尽管它是否实际执行该转换或仅检查它是否在DST中是另一回事。

请注意,这绝不是模糊的,因为UTC值永远不会模糊。

TimeZoneInfo.IsDaylightSavingTime在您感兴趣的时区2018-10-28T00:00:00Z时返回true

无法从UTC获得夏令时,因为它是UTC - 请在此处查看UTC说明

你需要当前的时区。 使用此信息,您可以使用TimeZoneInfo.IsDaylightSavingTime来确定当前TimeZone当前是否在DST中。

如果要存储数据服务器(例如,web),则应始终尝试获取用户时区并转换为UTC。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM