datetime 对象格式化为字符串
标准转换格式符号:
%a 本地星期的短名称 如:Sun, Mon, ..., Sat (en_US); So, Mo, ..., Sa (de_DE)
%A 本地星期全名称 如 :Sunday, Monday, ..., Saturday (en_US);Sonntag, Montag, ..., Samstag (de_DE)
%w 星期的数字表示,0表示周日,6表示周六 如:0,1,2,,,6
%d 日的数字表示,并且使用0来填补(0-9),如:01, 02, ..., 31
%b 月份的短名称显示,英文单词简写,如:Jan, Feb, ..., Dec (en_US);Jan, Feb, ..., Dez (de_DE)
%B 月份的全名称显示,如:January, February, ..., December (en_US);Januar, Februar, ..., Dezember (de_DE)
%m 月份数字显示,并且用0来补全,如:01, 02, ..., 12
%y 年份的数字表示,两位表示,如:00, 01, ..., 99
%Y 年份的数字表示,四位表示,如:0001, 0002, ..., 2013, 2014, ..., 9998, 9999
%H 24小时制表示,如:00, 01, ..., 23
%I 12小时制表示,如:01, 02, ..., 12
%p 上下午的表示,如:AM,PM
%M 分钟,并且用0补全(0-9),如:00, 01, ..., 59
%S 秒钟,并且用0补全(0-9),如:00, 01, ..., 59
%f 微妙表示,如:000000, 000001, ..., 999999
%z 时区偏移量,如:(empty), +0000, -0400, +1030
%Z 时区名称,如:(empty), UTC, EST, CST
%j 全年中的哪一个,用0补全,如:001, 002, ..., 366
%U 全年中的第几个星期,sunday为第一天如:00, 01, ..., 53
%W 全年中的第几个星期,monday为第一天如:00, 01, ..., 53
%c 本地时间,如:06/24/17 15:43:10
%x 本地日期,如:08/16/88 (None);
%X 本地时间,如:21:30:00 (en_US);
%% %符号
示例:
from datetime import datetime
dt = datetime.now()
st = datetime.strftime(dt, "%Y-%m-%d %H:%M:%S %p") # 2019-11-08 15:48:25 PM
print(st)
# 全年第几周,第几天
datetime.strftime(dt,'%Y-%m-%d %H:%M:%S %p %U %j') # 2019-11-08 15:51:27 PM 44 312
常用类
-
datetime.date
:日期类 -
datetime.time
:时间类 -
datetime.datetime
:时间类 -
datetime.timedelta
:时间间隔,两个时间点之间长度 -
datetime.tzinfo
:时区相关
date 类
表示一个日期,由年、月、日组成。
参数范围:
-
year
:[1, 9999]
年,即[MINYEAR, MAXYEAR]
-
month
:[1, 12]
,不是从 0 开始 -
day
:根据月份而定
常用方法和属性
import datetime
d = datetime.date
# 获取 date 对象能表示的最大、最小日期
>>> d.max
datetime.date(9999, 12, 31)
# 日期最小单位(天)
d.resolution
# 本地当前日期
>>> d.today()
datetime.date(2019, 11, 8)
# 根据给定时间戳,返回一个 date 对象,此处用 time.time() 获取时间戳
d.fromtimestamp(time.time())
# 将Gregorian日历时间转换为date对象,Gregorian 类似中国的农历
d.fromordinal(ordinal)
其他方法和属性:
import datetime
>>> d = datetime.date.today()
# 获取当前时间的年、月、日,year、month、day
>>> d.year
2019
# 替换时间,原对象不变
>>> d1 = d.replace(2018, 12, 30)
>>> d1
datetime.date(2018, 12, 30)
>>> d
datetime.date(2019, 11, 8)
# 返回星期几,星期一为 0
>>> d.weekday()
4
>>> d.isoweekday() # 返回星期几,星期一为 1
5
>>> d.isocalendar() # 元祖
(2019, 45, 5)
>>> d.isoformat() # 字符串
'2019-11-08'
d.strftime(fmt) # 自定义格式化方式
# 日期与日期间隔进行运算
>>> d + datetime.timedelta(2) # 加 2 天
datetime.date(2019, 11, 10)
time 类
time
类表示时间,由时、分、秒、微妙组成。
参数:
- hour:范围 0 - 24
- minute:范围 0 - 60
- second:0 - 60
- microsecond(微秒):0 -1000000
- tzinfo:表示时区信息
>>> d2 = datetime.time
>>> d2
<class 'datetime.time'>
>>> d2.min
datetime.time(0, 0)
>>> d2.max
datetime.time(23, 59, 59, 999999)
>>> d2.resolution
datetime.timedelta(0, 0, 1)
常用方法和属性
>>> d3 = datetime.time(21, 18, 19)
>>> d3.hour
21
d3.tzinfo # 时区
d3.isoformat() # 获取其字符串形式
d3.replace(hour=20) # 替换
d3.strftime('%I:%M:%S %p') # 字符串格式化(自定义格式)
datetime 类
常用属性和方法:
datetime.min、datetime.max:datetime # 所能表示的最小值与最大值;
datetime.resolution # datetime最小单位;
datetime.today() # 返回一个表示当前本地时间的datetime对象;
datetime.now([tz]) # 返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
datetime.utcnow() # 返回一个当前utc时间的datetime对象;
datetime.fromtimestamp(timestamp[, tz]) # 根据时间戮创建一个datetime对象,参数tz指定时区信息;
datetime.utcfromtimestamp(timestamp) # 根据时间戮创建一个datetime对象;
datetime.combine(date, time) # 根据date和time,创建一个datetime对象;
datetime.strptime(date_string, format) # 将格式字符串转换为datetime对象,data 与 time 类没有提供该方法。
示例一:
>>> from datetime import datetime
>>> d = datetime.today()
>>> d
datetime.datetime(2019, 11, 19, 17, 59, 42, 191504)
>>> d.strftime('%Y-%m-%d') # 将当前时间格式化字符串
'2019-11-19'
>>> d.strptime('2019-11-19', '%Y-%m-%d')
示例二:
>>> from datetime import datetime, timezone
>>> datetime.today()
datetime.datetime(2019, 11, 19, 18, 11, 35, 988223)
>>> datetime.now()
datetime.datetime(2019, 11, 19, 18, 11, 45, 630445)
>>> datetime.now(timezone.utc)
datetime.datetime(2019, 11, 19, 10, 11, 58, 293658, tzinfo=datetime.timezone.utc)
>>> datetime.utcnow()
datetime.datetime(2019, 11, 19, 10, 12, 11, 356732)
>>> import time
>>> datetime.fromtimestamp(time.time()) # 时间戳转换为 datetime
datetime.datetime(2019, 11, 19, 18, 12, 39, 124737)
>>> dt = datetime.now()
>>> dt.year
2019
>>> dt.timestamp()
1574158404.052619
>>> dt.date()
datetime.date(2019, 11, 19)
>>> dt.time()
datetime.time(18, 13, 24, 52619)
>>> dt.replace(2018)
datetime.datetime(2018, 11, 19, 18, 13, 24, 52619)
>>> dt.toordinal() # 返回日期是是自 0001-01-01 开始的第多少天 737382
>>> dt.weekday() # 返回日期是星期几,[0, 6],0表示星期一 1
>>> dt.ctime()
'Tue Nov 19 18:13:24 2019'
timedelta 类
表示两个时间的时间差,date
或 datetime
相减能够得到一个 timedelta
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
所有参数可选,且默认都是0,参数的值可以是整数,浮点数,正数或负数。
- millisecond(毫秒) 转换成 1000 microseconds(微秒)
- minute 转换成 60 seconds
- hour 转换成 3600 seconds
- week转换成 7 days
三个参数的取值范围分别为:
- 0 <= microseconds < 1000000
- 0 <= seconds < 3600*24 (the number of seconds in one day)
- -999999999 <= days <= 999999999
timedelta 类定义的类属性:
- timedelta.min:时间间隔对象的最小值,即 timedelta(-999999999).
- timedelta.max:时间间隔对象的最大值,即 timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999).
- timedelta.resolution:时间间隔的最小单位,即 timedelta(microseconds=1).
示例:
>>> from datetime import datetime
>>> from datetime import timedelta
>>> timedelta(365).total_seconds() # 一年总共秒数
31536000.0
>>> dt = datetime.now()
>>> dt + timedelta(3) # 三天后
datetime.datetime(2019, 11, 22, 18, 19, 31, 4088)
>>> dt + timedelta(-3) # 三天前
datetime.datetime(2019, 11, 16, 18, 19, 31, 4088)
>>> dt + timedelta(hours=-3) # 三小时前
datetime.datetime(2019, 11, 19, 15, 19, 31, 4088)
>>> dt + timedelta(hours=-3, seconds=30) # 三小时三十秒前
datetime.datetime(2019, 11, 19, 15, 20, 1, 4088)
>>> dt2 = dt + timedelta(hours=1, seconds=30)
>>> dt2
datetime.datetime(2019, 11, 19, 19, 20, 1, 4088)
>>> (dt2 - dt).seconds # 计算秒数
3630
参考文档:
http://www.liujiangblog.com/course/python/69