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 类

表示两个时间的时间差,datedatetime 相减能够得到一个 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 类定义的类属性:

  1. timedelta.min:时间间隔对象的最小值,即 timedelta(-999999999).
  2. timedelta.max:时间间隔对象的最大值,即 timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999).
  3. 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