Python 中时间处理的库太多, 基本的有time, 复杂的有datetime, 日历处理有Calendar, 各种时区信息的库… 各个库中函数的命名也十分让人崩溃,比如time中的ctime(), asctime(), strftime(), strptime(), localtime()你能记得住这些函数分别接受什么参数, 起什么作用吗? 我觉得挺崩溃的.

Arrow 是一个第三方时间日期处理库, 提供了非常简洁优雅的接口, 我们首先来分析一下这个库的功能模块.

api.py

向外提供了四个接口: get(), now(), utcnow(), factory(). 前三个都是代理到 ArrowFactory 相应的方法上, factory() 返回一个 ArrowFactory 实例.

facotry.py

ArrowFactory 干的事很少, 还是那三个工厂方法 get(),now(), utcnow(), 都返回一个 Arrow 实例, 代表一个时间点. get()ArrowFactory实现, 其他方法由Arrow实现.

arrow.py

Arrow 实现了 datetime 接口, 是一个标准的 datetime 对象, 而且增加了许多功能.

1.构造函数:
def __init__(self, year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

如果tzinfo == None, 则默认为 UTC 时间.

tzinfo 参数接受四种形式:

  • A tzinfo object.
  • A str describing a timezone, similar to ‘US/Pacific’, or ‘Europe/Berlin’.
  • A str in ISO-8601 style, as in ‘+07:00’.
  • A str, one of the following: ’local’, ‘utc’, ‘UTC’.
2. Arrow.utcnow() 与 Arrow.now(tzinfo=None)

这两个工厂方法比较简单. utcnow()调用datatime.utcnow()获取 UTC 时间, 然后构造Arrow对象.

now()接受一个tzinfo参数, 如果为空则默认为 dateutil_tz.tzlocal(), 即本地时间.

3. Arrow.get()

参考链接