Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ConvertTimeFromUtc()和ToUniversalTime()是否处理DST?_C#_Timezone_Dst - Fatal编程技术网

C# ConvertTimeFromUtc()和ToUniversalTime()是否处理DST?

C# ConvertTimeFromUtc()和ToUniversalTime()是否处理DST?,c#,timezone,dst,C#,Timezone,Dst,如果夏令时生效,并且日期对象已保存到数据库UTC格式中,您将检索该格式以在视图中显示它,例如asp.net-mvc中的视图 您可以使用以下方法来实现: public static DateTime ConvertToLocalTimeFromUtcTime(DateTime utcDate, string timeZoneId) { TimeZoneInfo localZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);

如果夏令时生效,并且日期对象已保存到数据库UTC格式中,您将检索该格式以在视图中显示它,例如asp.net-mvc中的视图

您可以使用以下方法来实现:

public static DateTime ConvertToLocalTimeFromUtcTime(DateTime utcDate, string timeZoneId)
{
    TimeZoneInfo localZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
    DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcDate, localZone);

    if (localZone.IsDaylightSavingTime(localTime)) 
        localTime = localTime.AddHours(1); // is this needed !?

    return localTime;
}
问题是,TimeZoneInfo.ConvertTimeFromUtc是否处理DST,或者您是否必须自己检查并向日期对象添加或减去X小时

使用ToUniversalTime将日期对象转换为UTC格式,从而将其持久化到数据库时遇到相同的问题。

是。只要目标时区使用夏令时,ConvertTimeFromUtc将自动处理夏令时调整

发件人:

执行转换时,ConvertTimeFromUtc方法应用destinationTimeZone时区中有效的任何调整规则

您不应尝试在转换过程中再增加一小时。那会给你一个错误的翻译


关于DateTime.ToUniversalTime,它确实考虑了DST,但使用此方法时要小心。它假定输入值位于计算机的本地时区。如果您只需要用DateTimeKind.Utc标记它,那么使用DateTime.SpecifyKind即可。

您的时区现在可能正在使用DST,这将使您的测试非常容易;对DST是否在特定地区有效是当地的政治决定。在web服务器上,您对任何一个都不了解。总是在浏览器中进行转换,它知道。@AndrewMorton,没错,我确实看到从客户端提供的时间中减去了2小时。但反过来又如何呢?你是说我不必在服务器端转换用户所在区域的时间吗?也许这会很有用:。@HansPassant-在浏览器中转换不一定是最好的主意。这是一种方法,但是。如果您拥有OP在本例中使用的时区id,那么TimeZoneInfo将比JavaScript更准确。此外,在很多情况下,您可能希望转换到不同的时区,而不仅仅是浏览器的本地时区。