c# - 转换接近夏令时的日期时间?

标签 c# dst datetime-conversion

我正在开发为 365 年 7 月 24 日运行的 GPS 设备运行报告的软件。部分报告输出要求我们将存储的数据库时间(以中部标准时间保存)转换为用户计时器(任何请求的时区)。一年两次,当人们运行在时间更改之前开始并在时间更改之后结束的报告时,我们会遇到 DST 问题。它在一行失败:

return TimeZoneInfo.ConvertTime(dateToConvert, DatabaseTime, UserTime);

dateToConvert 是要转换的 DateTimeDatabaseTimeUserTime 都是 TimeZoneInfo 对象。我没有做任何棘手或复杂的事情,但 DST 时间更改附近的 DateTimes 抛出异常。例如 3/10/2013 2:02:11 AM,即使它正在从中部时间“转换”为中部时间。

处理 DateTimes 接近 DST 时间变化的最佳方法是什么?

最佳答案

您的数据库中有垃圾,3/10/2013 2:02:11 AM 从未存在过。那天早上 1:59 AM 之后的那一分钟是 3:00 AM,时钟移动了一个小时。 .NET 不会容忍那个垃圾日期。

您将需要找出垃圾时间戳是如何在您的数据库中结束的。很明显,从一个时区到另一个时区的时间转换无视夏令时规则,比如在一个时区中激活但在另一个时区中不激活,很可能是这种垃圾的来源。如果您无法修复您的数据库以使用 UTC,那么至少在您的代码中执行此操作。首先在一个时区转到 UTC,然后在另一个时区返回本地时间。使用 TimeZoneInfo 类、ConvertTimeFrom/ToUtc 方法。

关于c# - 转换接近夏令时的日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15482809/

相关文章:

C#:如何从数据库的最后一行获取数据?我在 Visual Studio 2017 中使用

c# - 用于从 wsdl 创建代理类的 wsdl.exe 的替代方法

c# - 检查是否安装了完整版本的 .net?

php - 如何在 PHP 中检测不明确和无效的日期时间?

java - 检查是否因夏令时而增加时间

java - 将 apache.axis.types.Duration 转换为 HH :mm format

Java String to Date 格式为 “MM/dd/yyyy HH:mm:ss a” 的对象

c# - 随机顺序填充的最佳 C# 数据结构?

java - 巴西 DST 期间的日期解析异常

mysql - 如何转换 datetime : 1518427800 to hh:mm:ss dd/mm/yyyy in node. js?