时间日期格式化符号
- %Y:年,4位数
- %y:年,2位数
- %m:月,2位数(01-12)
- %d:天,2位数(01-31)
- %H:24小时制小时(00-23)
- %M:分钟数(00-59)
- %S:秒数(00-59)
- %f:毫秒数
与java中常用的格式化方式(yyyy-MM-dd HH:mm:ss)有区别,特别是大写“M”和小写“m”。倒是跟MySQL中的格式化差不多。
时间的处理
python的时间处理,可使用内置的time模块,也可以使用datetime.datetime模块。
- 使用time模块,主要是对time.struct_time的实例进行操作
- 使用datetime.datetime模块,主要是对datetime.datetime的实例进行操作
获取当前时间
使用time
import time
# 直接使用localtime()得到的是格林威治时间,比北京时间晚8小时
# now = time.localtime()
# 先用time.time()得到时间戳,再使用localtime(),取得的时间是本地时间
now = time.localtime(time.time())
# 直接打印的话,是一个time.struct_time的实例
print(now)
# 格式化输出
print(time.strftime('%Y-%m-%d %H:%M:%S',now))
使用datetime
from datetime import datetime as dt
# 直接获取的就已经是北京时间
now = dt.now()
# 直接打印,已经很像一个格式化时间了,但是带有毫秒数
print(now)
# 格式化输出
print(now.strftime('%Y-%m-%d %H:%M:%S'))
时间戳操作
使用time
# 获取当前时间的时间戳
timestamp = time.time()
print('当前时间的时间戳:%s'%timestamp)
# 获取某时间的时间戳
one_time = time.localtime()
tiamstamp = time.mktime(one_time)
# 时间戳转时间
timestamp = 1607703000
t = time.localtime(timestamp)
print(time.strftime('%Y-%m-%d %H:%M:%S', t))
使用datetime
# 先取得时间,后获取时间戳
now = dt.now()
timestamp = dt.timestamp(now)
# 时间戳转时间
timestamp = 1607703000
t = dt.fromtimestamp(timestamp)
print(t)
取得年,月,日,时,分,秒
使用time
# 必须传参,不然取得的不是北京时间
now = time.localtime(time.time())
print('%s年'%now.tm_year)
print('%s月'%now.tm_mon)
print('%s日'%now.tm_mday)
print('%s时'%now.tm_hour)
print('%s分'%now.tm_min)
print('%s秒'%now.tm_sec)
使用datetime
now = dt.now()
print('%s年'%now.year)
print('%s月'%now.month)
print('%s日'%now.day)
print('%s时'%now.hour)
print('%s分'%now.minute)
print('%s秒'%now.second)
自定义时间
使用time
貌似不太好定义
使用datetime
# 自定义2020年1月2日 3点4分5秒
c_time = dt(2020,1,2,3,4,5)
print(c_time)
# 自定义2020年1月2日,默认0点0分0秒
# 至少要有年月日三个参数
# 年:1~9999
# 月:1~12
# 日:1~28[29,30,31],注意闰月和大小月
c_time = dt(2020,1,2)
print(c_time)
字符串与时间互转
使用time
str_time = '2020-12-12 12:12:12'
# 字符串转时间
t = time.strptime(str_time,'%Y-%m-%d %H:%M:%S')
print(t)
# 时间转字符串
str_time_2 = time.strftime('%Y-%m-%d %H:%M:%S', t)
print(str_time_2)
非官方解释:
- strptime: 貌似是str parse time的缩写,即:将字符串解析成时间,返回一个时间对象
- strftime: 貌似是str from time的缩写,即:从时间中取得字符串,返回一个字符串
使用datetime
str_time = '2020-12-12 12:12:12'
# 字符串转时间,使用的方法名称和time相同,但是返回的时间类型是datetime.datetime
t = dt.strptime(str_time,'%Y-%m-%d %H:%M:%S')
print(t)
# 时间转字符串的方法名称与time相同,但是用法有区别
str_time_2 = t.strftime('%Y-%m-%d %H:%M:%S')
print(str_time_2)
时间的加减操作
使用time
貌似不太好操作
使用datetime
datetime.timedelta用于表示时间间隔
from datetime import datetime as dt
from datetime import timedelta as
- “日期时间”与“时间间隔”进行加减操作,得到一个新的“日期时间”
now = dt.now()
# 定义一个时间间隔:365天
one_year = td(days=365)
# 把这个时间间隔直接加到当前时间上
next_year = now + one_year
print(next_year)
# 定义一个间隔:1天23小时4分10秒
time_diff = td(days=1, hours=23,minutes=4,seconds=10)
next_time = now + time_diff
print(next_time)
next_time = now - time_diff
print(next_time)
- “日期时间”与“日期时间”相减,得到一个“时间间隔”
now = dt.now()
next_time = dt(2022,1,1)
time_diff = next_time - now
print(time_diff)
# 可得出两个时间的间隔天数
print(time_diff.days)
# 可得出两个时间的间隔秒数(不包括整天,就是凑不够一天的时间的秒数)
print(time_diff.seconds)
# 可得出两个时间的间隔总秒数,貌似没有直接获取小时,分钟的方法,得自己计算:(
print(time_diff.total_seconds())
- “时间间隔”与“时间间隔”进行加减操作,得到一个新的“时间间隔”
time_diff_a = td(days=1, hours=23,minutes=4,seconds=10)
time_diff_b = td(days=2, minutes=55,seconds=50)
# 相加
time_diff_c = time_diff_a + time_diff_b
print(time_diff_c)
print(type(time_diff_c))
# 相减
time_diff_d = time_diff_a - time_diff_b
print(time_diff_d)
- “日期时间”与“日期时间”相加,必须报错:)
小结
- datetime比time好用。
- python里时间日期相关类,既有time.struct_time,又有datetime.datetime,有点不习惯。