python datetime的使用
2017-03-04
原创作品: 首发u3v3, 转载请保留
地址: https://www.u3v3.com/ar/1273
作者ID: Yi_Zhi_Yu
首发日期: 2017.3.4
乱七八糟的datetime
在PHP中, 时间转换非常简单, strtotime
和 date
两个函数就完事了, 但是在python 中,时间相关的包有好几个, 我常用的是datetime
.
但这个包我至今还是对datetime
这个包的使用非常疑惑, 每次都要再专门查一下, 今天就来初步撸撸这个包
datetime 模块
datetime
是一个比较大的包, 这个包下面又有几个小模块, 以下分别介绍
datetime.date 模块
这个模块通过名字可以看出, 是对精确到天的日期的处理,
- 构造一个 date 的对象如下:
d = datetime.date(year=2016, month=9, day=3)
这就是一个日期格式的对象
还有是通过获取的方式构造的日期格式
d = datetime.date.today() # 获取当天日期
d = datetime.date.fromtimestamp(1499998880) # 通过 时间戳 获取日期
这里没有直接通过字符串生成日期对象
的方式, 也没有日期对象直接转换时间戳
的方式
- 常用属性方法
既然我们已经得到了一个 date 的对象, 我们需要的属性该怎么使用呢,
以下是常用的日期对象属性总结
d.year # 2016 日期所在年份
d.month # 9 日期所在月份
d.day # 3 日期月份中的天
还有一些函数使用
d.strftime('%Y/%m/%d') # 2016/09/03 格式化输出
d.replace(year=2017) # datetime.date(2017, 9, 3) 替换对象中的年份(月/日也可以替换)
d.weekday() # 5 Monday == 0 ... Sunday == 6 一周中第几天,注意这里是从周一,第0天开始计算的,所以这里d是在周六
d.isoweekday() # 6 Monday == 1 ... Sunday == 7 一周中的第几天,这个是我们常见的iso标准, 这里即表示周六
datetime.time 模块
这个模块是对 时/分/秒/毫秒 的时间处理模块
- 构造一个time对象
t = datetime.time(hour=13, minute=3, second=12)
注意这里并没有其他直接构造 time 对象的方式了
- 常用属性和方法
以下常用属性
t.hour # 13 所在的小时 24小时制
t.minute # 9 所在的分钟
t.second # 12 所在的秒
t.microsecond # 0 所在的毫秒
以下是常用函数
t.strftime('%H:%M:%S') # '13:03:12' 格式化输出
t.replace(hour=9) # datetime.time(9, 3, 12) 替换时分秒毫秒, 类比datetime.date.replace
datetime.datetime 模块
这个模块综合了 datetime.date 和 datetime.time 两个模块, 既有对日期的处理, 也同时包含了对时分秒级别的处理
- 构造 datetime.datetime 对象
直接构造
dt = datetime.datetime(year=2016, month=9, day=3, hour=13, minute=43, second=12) # 这里年月日是必须的参数, 时分秒甚至微秒属于可选参数
也有一些获取的方式构造的方式
dt = datetime.datetime.today() # 获取当前时间的datetime对象
dt = datetime.datetime.now() # 默认也是当前时区时间的datetime对象, 不过可以指定时区(这里暂不讨论)
dt = datetime.datetime.fromtimestamp(1423000000) # 通过时间戳获取, 这个很常用
dt = datetime.datetime.strptime('2016-12-11 13:32:32', '%Y-%m-%d %H:%M:%S') # 通过格式化的时间字符串和对应的格式说明, 构造的对象, 这个非常常用
注意, 这个上面就包含了通过字符串构造datetime.datetime对象
的方式
- 常用属性和方法
因为这个模块同时包含了对日期和时分秒的处理, 所以在datetime.date
和 datetime.time
的常用属性和方法在datetime.datetime
模块中都有
# 属性
dt.year
dt.month
dt.day
...
dt.microsecond
# 函数
dt.strftime('%Y-%m-%d %H:%M:%S')
dt.weekday()
dt.isoweekday()
...
这里也说一下 datetime.datetime 特有的常用方法
dt.timestamp() # 转换时间戳
这样, 我们就可以将时间字符串转换成时间戳相互转换了
时间字符串转换时间戳
两步走
# 时间字符串构造datetime.datetime对象
dt = datetime.datetime.strptime('2016-12-11 13:32:32', '%Y-%m-%d %H:%M:%S')
# datetime.datetime 对象转换时间戳
dt.timestamp()
时间戳转换为时间字符串
也是两步走
# 时间戳构造datetime.datetime 对象
dt = datetime.datetime.fromtimestamp(1423000000)
# datetime.datetime 对象格式化时间字符串
dt.strftime('%H:%M:%S %H:%M:%S')
现在, 我们已经把datetime这个包里面的三大模块撸了一遍, 当然, datetime包里还有几个模块, 比如 timezone
(时区相关), timedelta
(时间差相关)的模块也挺重要, 后面我会补充完整
写到这里, 我对datetime
这个包也算有了一个初步但比较清晰的理解了, 不是那么糊涂了, 那你们看到这里时是不是也是呢, 如果有什么建议和疑问, 请在评论里提出来, 我会继续改进