【问题标题】:Importing time data without time zone information and DST导入没有时区信息和 DST 的时间数据
【发布时间】:2014-12-25 16:38:41
【问题描述】:

这是关于处理时区的相当笼统的问题。

我的情况如下:我正在将 historic 日志文件条目导入数据库。这些条目具有经典 Unix 纪元格式的时间戳,并且不包含时区偏移信息。我知道他们记录的时区。时区遵循夏令时。如何处理将这些数据导入时区感知数据库?大多数条目都很简单,但有一个问题时间 - DST 结束时(时间向后移动一小时,使最后一小时“重新运行”)。有完全有效的相同时间戳表示不同次。有没有商定的方法来处理这个任务?

我是否纠正了在某些数据输入时这个问题无法解决?

【问题讨论】:

    标签: timezone


    【解决方案1】:

    我不相信这个问题是无法解决的。你需要知道一些事情——#1,当这些年 DST/ST 发生时(所以一些时间库会很有用),#2 能够按顺序解析这些日志。导入时,您正在使用库解析日期时间以确定它是 DST 还是 ST。对于在 DST 转换前后发生的一小时,您按顺序播放它,并且当一个条目在前一个条目之前 1 小时跳转时,您知道这需要进行调整。这是假设您的数据是按顺序排列的,并且您可以进行该分析。不是说这很容易,但肯定是可能的。唯一无法确定在过渡时间内是否只有单个日志条目的点。您将无法知道它是在 DST 之前还是之后。希望您的日志足够嘈杂,以至于您在之前和之后的这段时间内都有样本。

    由于你没有写任何关于语言或任何其他细节的东西,我不能给你任何具体的实现。

    【讨论】:

    • 这是一般问题,不需要考虑任何语言细节。问题的症结在于时间戳值的范围,每个值代表 两个 实际时间,而您根本不知道哪个是哪个。您可能会尝试做一些启发式方法,但它们不能万无一失。只要考虑到有问题的过渡期只有一个条目 - 您无法知道它是 DST 时间戳还是非 DST 时间戳。
    • 没错。只有在这段时间内您目睹了复发,您才能确定。如果在该时间段内只记录了一个事件,您无法确定它是在 DST 之前还是之后。但是你必须问自己,你的项目的要求是否决定了它很重要?我们只在一年一次的周日凌晨谈论凌晨 2 点和 3 点?你能允许这个误差范围吗?我猜你有这个误差范围,否则日志会被更仔细地保存。
    猜你喜欢
    • 2012-07-23
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2011-10-23
    • 2016-03-21
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多