【问题标题】:How do you handle timezones for data processing?您如何处理数据处理的时区?
【发布时间】:2010-09-21 15:07:23
【问题描述】:

很好奇人们是如何解决这个问题的... 我有一系列工作在一夜之间运行,根据当天的客户数据汇总报告。他们现在要求时区支持。

其中一个报告是……您昨晚有 x 个订单,但昨晚可能会因时区而异。组织或处理数据以便考虑时区以使这项工作更容易的最佳方法是什么?

谢谢

【问题讨论】:

    标签: java python timezone data-processing


    【解决方案1】:

    最好以 UTC 时区表示所有日期。这个时区没有令人困惑的夏令时。然后,美国/太平洋时区的客户可以要求报告 2010-09-20T00:00-700 到 2010-09-21T00:00-700 之间的订单(使用 ISO 8601 format)。程序的输入层应将客户日期和存储的订单日期转换为自 UTC 纪元以来的秒数,然后从那里开始。

    【讨论】:

    • 数据不是动态提取的,它是在夜间作业上运行的。因此,如果订单是在太平洋标准时间 12:01 收到的,它将在第二天的运行中处理。
    • 无论何时提取数据,您的时区行为都应该相同。用户输入带有明确时区的日期,您的代码所做的第一件事就是将其转换为自 UTC 纪元以来的秒数。从那时起,所有整数都在同一时间线上。清楚吗?
    【解决方案2】:

    在我的应用程序中,我将本地时间加上偏移量保存到UTC。这样,我仍然可以比较代码中的值(通过将它们转换为世界时间),但是当我将其显示在屏幕上时,用户会看到他们期望的时间(“是的,我昨天 9:30 做到了”) .通过开关,他们可以显示时区或切换到世界时间或以当地时间显示所有时间。

    【讨论】:

    • 这是一个 TB 的日常数据,需要离线处理并汇总成汇总数据。
    【解决方案3】:

    根据我的经验,我们在夜间运行期间将数据汇总到每小时(或十五分钟)的存储桶中。然后,您可以让用户请求根据他们用于报告的时区获取相关存储桶。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 2010-09-11
      • 1970-01-01
      • 2016-02-29
      相关资源
      最近更新 更多