Python中与时间和日期相关的常见模块主要有calendar,time和datetime,后两个主要用于时间的计算和处理等,而calendar一般则用于日历获取、显示等方面。
import time
import datetime
import time
import datetime
a= time.localtime()
b=time.asctime()#time.asctime([tuple])将时间元组转换为字符串,如果时间元组不存在,则使用localtime()返回的当前时间。
c=time.ctime()#将纪元以来的时间(以秒为单位)转换为本地时间中的字符串\
d=time.time()#返回时间戳
print('a:',a)
print('b:',b)
print('c:',c)
print('d:',d)
a: time.struct_time(tm_year=2020, tm_mon=8, tm_mday=19, tm_hour=22, tm_min=31, tm_sec=8, tm_wday=2, tm_yday=232, tm_isdst=0)
b: Wed Aug 19 22:31:08 2020
c: Wed Aug 19 22:31:08 2020
d: 1597847468.5111706
#strptime()函数
strptime(string, format) -> struct_time
#strftime()函数
strftime(format[, tuple]) -> string
Commonly used format codes:
%Y Year with century as a decimal number.
%m Month as a decimal number [01,12].
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%M Minute as a decimal number [00,59].
%S Second as a decimal number [00,61].
%z Time zone offset from UTC.
%I Hour (12-hour clock) as a decimal number [01,12].
%p Locale’s equivalent of either AM or PM.
这里有两个函数使用的简单范例
from time import *
time_tuple= localtime()#返回现在时间的时间元组
str1=strftime('%Y/%m/%d',time_tuple)
print(str1)
tuple2=strptime("2020/08/19","%Y/%m/%d")
print(tuple2)
2020/08/19
time.struct_time(tm_year=2020, tm_mon=8, tm_mday=19, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=232, tm_isdst=-1)
也可以两个函数的结果互相充当另一个函数的参数:
from time import *
time_tuple= localtime()
str1=strftime('%Y/%m/%d',time_tuple)
print(str1)
#此处将string直接改成我们的str1字符串
str2=strptime(str1,"%Y/%m/%d \n")
print(str2)
2020/08/19
time.struct_time(tm_year=2020, tm_mon=8, tm_mday=19, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=232, tm_isdst=-1)
ValueError: unconverted data remains:
(2)strftime()函数不能直接在括号内用中文转化成一定的格式
from time import *
time_tuple= localtime()#返回现在时间的时间元组
str1=strftime('%Y年%m月%d日',time_tuple)
print(str1)
报错:UnicodeEncodeError: ‘locale’ codec can’t encode character ‘\u5e74’ in position 2: encoding error
原因是括号中的中文没有转化为unicode编码失败的
from time import *
time_tuple= localtime()#返回现在时间的时间元组
#方法一:改变编码
string=strftime('%Y年%m月%d日'.encode('unicode_escape').decode('utf8'),time_tuple).encode('utf-8').decode('unicode_escape')
print('方法一:',string)
#方法二:格式化输出
str1=strftime("%Y{}%m{}%d{} %H{}%M{}%S{}",localtime())#因为str1保存的是字符串,{}再用format自然就可以格式化输出了
print('方法二:',str1.format('年','月','日','时','分','秒'))
#或者如下
print('另一种格式化的方法:',strftime('%Y{y}%m{m}%d{d}',localtime()).format(y='年',m='月',d='日'))
方法一: 2020年08月20日
方法二: 2020年08月20日 00时09分12秒
另一种格式化的方法: 2020年08月20日
二、datetime模块
datetime对象
from datetime import *
print(datetime.now())
#注意now()调用的方式,且返回的是datetime类存储时间类型
#用print函数输出时,相当于调用了str(datetime),将datetime类型转化成字符串类型
datetime.now()
2020-08-20 00:19:10.856333
datetime.datetime(2020, 8, 20, 0, 19, 10, 856333)
timedelta
datetime.now()-datetime(2020,8,19)
#datetime对象间的减法结果类型为timedelta,表示时间差
datetime.timedelta(days=1, seconds=1272, microseconds=850314)
也有strftime和strptime两种方法用于转换格式
from datetime import *
datetime.now().strftime('%Y %m %d')
'2020-08-20'
注意不要用错了strftime函数,写成
datetime.strftime('%Y-%m-%d',datetime object)
//否则报错
TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'str'