如果是未知地区的夏令时,请检查日期(日期时间)-c#



根据我从其他问题中了解到的内容,我使用以下代码检查日期是否为夏令时,并根据需要进行更改。我不知道应用程序将使用哪个区域,因此我使用的是Utc。然而,它并没有像预期的那样发挥作用。

DateTime dateValWithOffset = dateVal;
TimeZoneInfo timeZoneInfo = TimeZoneInfo.Utc;
if(timeZoneInfo.IsDaylightSavingTime(dateValWithOffset))
{
dateValWithOffset = dateValWithOffset.AddMinutes(60);
}

示例:对于样本日期(06JUL-21 06.16.34.547000000 AM(,上述代码应将dateValWithOffset显示为07/06/2021 02:16:34.547 AM但返回06/06/2021 01:16:34.547 AM。如果有人能指出我哪里错了,请。

Datetime值应始终为UTC。要在机器或用户的本地时区中格式化日期时间,应转换为DateTimeOffset。知道当地时间和知道该时间是否在夏令时是两回事。

// machine local
var timeZoneInfo = TimeZoneInfo.Local;
// or by name
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(name);
var localTime = new DateTimeOffset(dateVal, timeZoneInfo.GetUtcOffset(dateVal));
var isDst = timeZoneInfo.IsDaylightSavingTime(localTime)

IMHODateTime是一种糟糕的类型,设计于云计算时代之前。除Utc之外的所有DateTimeKind值都鼓励程序员继续错误地处理日期,因此应予以弃用。

正如jason.kaisersmith在评论中所说;UTC是通用的,所以没有夏令时"

详细说明一下,UTC没有夏令时。相反,夏令时在世界各地的每个时区都有不同的观测方式。有些时区根本不使用它。某些时区开始和停止夏令时的日期或时间与其他时区不同。甚至有一个时区的夏令时从通常的1小时改为30分钟。如果没有时区参考,夏令时的概念就毫无意义。

为了清晰和参考,以下是2022年按国家划分的预计夏令时日期概述,以及2022年上半年和下半年的详细日期和时间列表。

最新更新