功能齐全的日期和时间库

7 投票
6 回答
6103 浏览
提问于 2025-04-15 14:24

我想知道有没有人知道一个好的日期和时间库,它应该具备以下这些正确实现的功能:

  • 微秒级精度
  • 夏令时
    • 举个例子:它应该知道在2009年3月8日的美国,凌晨2:30这个时间是不存在的,因为那天是夏令时调整的日子。
    • 我应该能够指定一个时区,比如“美国/东部”,它应该聪明到知道某个时间戳是对应东部标准时间(EST)还是东部夏令时间(EDT)。
  • 自定义日期范围
    • 能够创建专门的工作日历,跳过周末和假期。
  • 自定义时间范围
    • 能够定义工作时间,这样在工作时间之外请求的时间可以向上或向下调整到下一个或上一个有效的小时。
  • 算术运算
    • 能够对所有单位(年、月、周、天、小时、分钟等)进行加减运算。需要注意的是,像加0.5天这样的操作并不明确,因为它可能意味着12小时,也可能意味着一天的一半(而在夏令时调整时,一天并不是24小时)。
  • 自然边界对齐
    • 给定一个时间戳,我希望能够做一些事情,比如向下取整到最近的十年、年、月、周,等等,甚至是四分之一小时、小时等。

我现在使用的是Python,不过如果有其他语言(比如Perl、C或C++)的解决方案我也很乐意尝试。

我发现Python自带的库在夏令时的逻辑上不够完善,而且对我来说,没有明显的方法来设置自定义的时间范围。

6 个回答

6

前几天看到这个,我自己还没用过……看起来很不错。http://crsmithdev.com/arrow/

6

可以看看 dateutil 这个库,还有可能 mx.DateTime 这个库。

11

Python的标准库里有一个叫datetime的模块,它的设计是为了避免那些经常变化的、容易引起争议的内容。因此,它没有直接支持时区、夏令时、模糊解析和一些不太明确的计算(比如“一个月后”这种说法)。为了处理这些问题,你可以使用dateutil来进行各种操作,或者用pytz来处理时区(包括夏令时的问题)。不过,像“假期”这种变化很大的事情,它们就不太能处理了,因为假期不仅在不同的国家和地区不一样,就连同一个地方的不同公司也可能有不同的假期安排(比如在美国,有些公司把“哥伦布日”当作假期,但有些公司则不这样;还有一些公司在不同的地方可能会有不同的假期安排)。在这种情况下,想要找到一个通用的库来搞定这些混乱的假期安排,实在是有点不现实。

撰写回答