【发布时间】:2014-11-30 18:48:06
【问题描述】:
我有 CSV 数据文件,其中包含本地时间的时间戳记录。不幸的是,数据文件涵盖了夏令时更改的时间段(2013 年 11 月 3 日),因此记录时间戳的时间部分为:12:45, 1:00, 1:15, 1:30, 1:45, 1:00, 1:15, 1:30, 1:45, 2:00。我希望能够将数据库中的值转换并存储为 UTC。
不幸的是,.NET 的标准 DateTime.Parse() 函数将解析为这样(2013 年 11 月 3 日):
| Time String | Parsed Local Time | In DST | Parsed Local Time to UTC
| 12:45 am | 12:45 am | Yes | 4:45 am
| 12:59:59 am | 12:59:59 am | Yes | 4:59:59 am
| 01:00 am | 1:00 am | No | 6:00 am
| 01:15 am | 1:15 am | No | 6:15 am
因此它永远不会将1:00-1:59:59 am 范围视为在 DST 中,并且我在 UTC 中解析的时间戳会跳一个小时。
是否有一个库或类可以让我解析时间戳并考虑 DST 的变化?就像某个可实例化的类会记住它已经收到的时间戳流并相应地调整解析的时间戳?
解析时可以做出的数据假设:
- 我在本地和 UTC 文件的标题部分都有文件的开始时间(第一条记录的时间戳)。
- 记录按时间戳排序
- 所有当地时间均采用东部标准时间
- 数据也可以通过其他方式:从 DST 之外进入它
- 记录包含完整的时间戳,格式为:
yyyy/mm/dd HH:mm:ss(2013/11/03 00:45:00)
注意:虽然我的软件是 C#,但我没有专门标记 C#/.NET,因为我认为我可以使用任何语言的解决方案实现并在必要时重新编码。
【问题讨论】:
-
文件中的连续时间戳可以在 UTC 中倒退吗?
-
不,可以假定它们是按 UTC 顺序排列的。
-
我只是懒得输入上面的表格。数据文件中的时间戳字段包含完整的日期和时间。我将其添加到上述假设中。
标签: datetime timestamp dst date-parsing