Python 的日期时间 datetime 库

作者: , 共 1874 字 , 共阅读 0

datetime 是 Python 的标准库:

import datetime

1、日期和时间对象

包含下面三个类:

  • datetime.date 日期,包含 year, month, day 三个成员。
  • datetime.time 时间,包含 hour, minute, second, microsecond, tzinfo (时区)。
  • datetime.datetime 日期和时间的复合体。

注意这三类实例都是不可变对象,即自身是不能被修改的,要想修改只能生成新的对象。比如 datetime.date 可以简单理解为(year, month, day) 的不可变三元组。

1.1、直接初始化

date = datetime.date(2020, 11, 12)
time = datetime.time(1, 2, 59)
datetime = datetime.datetime(2020, 11, 12, 1, 2, 59)

1.2、其它共同初始化函数

下面这几个可同时作用在三个类上:

  • today()
  • now()
  • fromtimestampe(timestamp), timestamp 是秒时间撮。
  • fromordinal(index), index 是序号,公元 1 年 1 月 1 日为 1 ,每过一天增加 1。
  • fromisoformat("2020-11-12 01:02:59.123")

1.3、互相之间转换函数

下面 dt 表示为一个 datetime.datetime 对象, d 表示为 datetime.date 对象, t 为 datetime.time 对象。

  • d = dt.date()
  • t = dt.time()
  • dt = datetime.datetime.combine(d, t)

1.4、其它一些函数

1.5、修改

注意所有修改都返回新的对象,原对象是不可变对象。

date = date.repleace("day", 12)

1.6、与字符串的转换 - 格式化和反格式化

主要是 strptime 和 strftime ,在 date, time, datetime 里都有。

date = datetime.date.strptime("2020-11-12", "%Y-%m-%d")
date.strftime("%Y-%m-%d %H-%M-%S")

其中常用格式控制符:%Y (四位数年份)、%y (两位数年份)、%m (两位数月份)、%d (两位数日)、%H (两位数 24 禁止小时数)、%M (两位数的分钟)、%S (两位数的秒数)%f (六位数微妙)

然后一个通用格式函数为:

  • isoformat(),等价于 strftime("%Y-%m-%d %H:%M:%S.%f")。

2、日期时间操作 - 加减法

2.1、datetime.timedelta 对象

datetime.timedelta 表示两个 datetime 之间差,在内部表示上,为一个(days, seconds, microseconds)的三元组,可以通过 days, seconds, microseconds 获取到成员值(只读)。另外可以通过 total_seconds() 函数获取到总秒数。

它可以直接初始化:

def datetime.timedelta(days=0, seconds=0, microseconds=0, 
                       milliseconds=0, minutes=0, hours=0, weeks=0):
    pass 

two_day = datetime.timedelta(days=2)

但更多的时候作为两个日期或时间之间的差:

td = d1 - d2;
td = t1 - t2;
td = dt1 - dt2;

注意 date 和 time 之间的减法是非法的!

2.2、调整时间日期

有了 timedelta ,就可以很方便地调整时间和日期对象了,但仍需注意,必须使用返回值:

d = datetime.date.today()
d = d + datetime.timedelta(days=100)

dt = datetime.datetime.now()
dt -= datetime.timedelta(weeks=2, minutes=60)

Q. E. D.

类似文章:
相似度: 0.262
其实moment.js 官方主页已经很详细和清晰了,这里做一下笔记加强记忆。
最近用 Matlab 写了个东西,运行效率不如我意。用 Profiler 跟踪了一下,结果让我大吃一惊。其中三分之一的时间花费在 datestr 这个函数上,六分之一的时间花费在 save 和 load 数据上。这里先谈前一个问题,关于 save 和 load 的效率以后再谈。
如果一个日期(或者时间),如果用字符串,比如"2010-10-04"的形式,各个系统都没有什么区别。在某些时候,将日期用数字表示,将大大增加对日期查找、比较的效率。而如果用数字来表示日期,在不同的系统之间差别就大了。
编程 » SQL
现在 Access 用的人应该不多了,本来我以为我也不可能用这玩意儿,但最近在用 VBA 通过 SQL 处理数据时,发现它的语法是 Access 的语法。平时对 SQL Server 语法相对熟悉一些。下文总结了 Access 和 SQL Server 语法的差异。
Python 提供很多语法糖,用起来非常方便。@dataclass 就是其中之一。
Pyhon 的抽象基类( abstruct base class )库abc定义了类似于 C++的纯虚函数的功能:
编程 » Python库
Python 的官方自带库json库处理 JSON 很方便,但它只支持标准的 JSON 格式。rapidjson 库来自于 json 的 C++库,速度比json库快五倍,而且支持一些非标准的 JSON 字符串。
编程 » Excel, VBA
VBA 的 Date 类型比较奇怪。
编程 » Python
在 Python3 以上,通常说的字符串是指unicode字符串,以下将不再重复强调。
除去三期试验结果不论,相比起 mrna 在以色列而言,灭活疫苗在智利的实际效果令人沮丧。主用辉瑞 mrna 疫苗的以色列很快就降感染率&死亡人数降到几乎可以忽略不计,但主用科兴灭活疫苗的智利的感染人数和死亡还一直处于历史高位。
五一去了野山坡百里峡景区。其峡谷的确独具一格。华为 GT 手表记录的路程 13 公里,爬升 500 米。但华为手表历来高估路程和爬升,实际路程估计约 10 公里。