Python CheatSheet-日期、时间控制与datetime模块使用

本文根据Python2的官方文档展开,链接在此

1. datetime模块介绍:

有下面几种类:

datetime.date

就是存的公历日期,有三个属性,year,month,day

datetime.time

存的是时间,属性有hour, minute, second, microsecond, and tzinfo。没有年月日

datetime.datetime

存的是日期和时间,属性有year, month, day, hour, minute, second, microsecond, and tzinfo.

datetime.timedelta

存的是日期或时间差,精度是microsecond。正值对应更晚的时间或日期。比如

import datetime
oneDay = datetime.timedelta(days = 1)

!!!注意!!!

timedelta的最大单位是days,所以不要指望能够加一个月甚至一年!

datetime.tzinfo

是跟time zone相关,在不同时区转换中有用。

2. 日期操作

对于date objects,有三种方式,链接在这里。这里就讲讲我自己常用的:

建立date对象:

可以从date.today()建立当前日期的date对象

也可以直接用date命令直接建立。比如

也可以用datetime.strptime()先建立datetime对象,再用.date()命令将datetime转换成date。比如

import datetime
today1 = datetime.date.today()
today2 = datetime.date(2019, 4, 20)
today3 = datetime.datetime.strptime('2019-04-20', '%Y-%m-%d')
today4 = today3.date()

date的变换/操作

对已有的date,加减timedelta获得新的日期。

也可用replace命令,将年、月、日中的一个或多个替换成指定值。

两个date之间的减法将得到timedelta,对应日期差。

返回成字符串:

date对象可以用.isoformat()命令直接返回'2019-02-28'这样的string

date对象在如果用print(),或者%s的格式化字符串打出的就是'2019-02-28'这样的string。

也可用date.strftime(format)命令,返回其他指定格式的日期字符串。

3. datetime和date之间转换:

datetime转date只需要用.date()命令,date转datetime需要补上后面的时间,所以代码中有一个datetime.datetime.min.time()。如下:

import datetime
# convert date to datetime
todayDate = datetime.date.today()
todayDatetime = datetime.datetime.combine(todayDate, datetime.datetime.min.time())

# convert datetime to date
nowDatetime = datetime.datetime.now()
nowDate = nowDatetime.date()

4. 截取当前时间,计算时间差 

这个的典型应用就是记录程序、模块、代码的运行起止时间和耗时,可以用datetime记录当前时刻,然后用两个datetime相减,获得日期和时间差,前面说过了两个datetime相减的日期和时间差将以timedelta来保存。

datetime.datetime.timedelta有三个属性:

days:时间差是多少天

seconds:时间差是多少秒

microseconds:时间差是多少微秒

5. 小总结:

# import datetime
# 1. 显示当前时间
now_datetime = datetime.datetime.now()
print(now_datetime)
2019-04-27 21:45:11.753420
type(now_datetime)
<type 'datetime.datetime'>

# 2. strftime和strptime
# strptime是将字符串转换成datetime的date或datetime或time类型
# strftime是将datetime的date或datetime或time类型转换成字符串
# 比如
date1 = datetime.date(2019, 4, 27)
date_str2 = datetime.datetime.strftime(date1, '%Y-%m-%d')
datetime3 = datetime.datetime.strptime(date_str2, '%Y-%m-%d')
date4 = datetime.datetime.strptime(date_str2,'%Y-%m-%d').date()

PS:

1. 注意几个坑:

timedelta的最大单位是days,所以不能用它直接加一个月或一年。

replace的时候,小心变量不要超出范围,比如月份大于12或小于1之类的。

2. strftime()和strptime()用到的format:

可以参考这个链接。典型的比如:

%y,年份后两位,%Y年份四位

%m,月份两位数字

%d,日期两位数字

%H,小时两位数字

%M,分钟两位数字

%S,秒两位数字

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章