日常工作中基本上每天都会与时间类型进行交互,如数据库中各数据的创建时间、更新时需要写入的更新时间等。 问题如下。
那是UTC Time (世界统一时间)还是本地时间?
的日期格式怎么格式化?
得到时间戳后,该怎么转换为目标时间呢?
如果我想将数据库的时间转换为时间戳,该怎么办?
等等
上述事情并不复杂,但是如果需要搜索到使用这样的基础的时候,就没有必要谈效率了。
下面是一些使用datetime库管理和转换日期和时间的示例。
例1 :获取当前时间
导入时间
从日期导入日期
now=datetime.now (
打印(f '当前时刻: {now} ) )
打印(f '当前时间为: (新年,新月,日) ) )
strf_now=datetime.now ().strftime (' % y-% m-% d % h : % m : % s.% f ' ) ) ) ) ) ) ) ) )
将print(f )当前时刻:(strf_now ) )格式化) ) ) ) ) ) ) ) ) ) ) )
strf _ now _1=日期.时间(日期.否),' %Y-%m-%d %H:%M:%S ' )
print(f )格式化当前时间-1:(strf_now_1) )
输出
当前时间:日期时间.日期时间(2020、12、13、16、5、57和448449 )。
当前时间分为:(2020、12、13 )
格式化当前时间: ' 2020-12-1316336005336057.448602 '
格式化当前时间- 1: ' 2020-12-1316336005336057 '
对上述代码进行说明。
now的datetime.now ) )用于获取当前时间,返回的数据为datetime类型。 year .mongo .day分别用于获取年、月、日;
strf_now的strftime用于对日期类型的数据进行格式设置。 格式化后,返回的是str类型的数据;
strf_now_1显示了使用strftime进行格式化的另一种方法。 返回的结果和数据类型与strf_now相同。 在这里,尝试用伪代码写上述两种方法
{datetime型对象. }.strftime({格式化程序组} )。
datetime.strftime ({日期时间型对象},{格式化程序组} ) )
strftime的格式已整理在文末,请保存好,使用时方便查阅。
实例2 :获取当前的UTC时间
从日期导入
timedeltautc_now = datetime.utcnow()
print(f'UTC 当前时间: {utc_now}')
utc2local = utc_now + timedelta(hours=8)
print(f'当地当前时间: {utc2local}')
<OUTPUT>
UTC 当前时间: datetime.datetime(2021, 9, 8, 12, 13, 31, 472850)
当地当前时间: datetime.datetime(2021, 9, 8, 20, 13, 31, 472850)
对上述代码进行解释:
datetime.utcnow() 用来获取 UTC (全球统一)时间,返回的数据类型为 datetime 类型;
utc2local 完成的是 UTC 时间转当前时间的过程(科普:UTC 时间转当前实际上做的只是在原有时间基础上加 8 小时);
其中的 timedelta 会在“实例 3”中讲解,它的作用是可以在当前时间的基础上增加或者减少一定的时间。
实例 3:获取一个时间之前或者之后一段时间后的时间,使用timedelta可以很方便地实现
from datetime import timedelta
delta_now = datetime.now() + timedelta(days=1)
print(f'delta_now: {delta_now}')
<OUTPUT>
delta_now: datetime.datetime(2021, 9, 8, 20, 54, 45, 479097)
对上述代码进行解释:
首先需要注意,与 timedelta 相加的,须为 datetime 类型;
timedelta(days=1) 返回 datetime 类型,相加后,也返回 datetime 类型;
delta_now 表示在现在的基础上,加上一天返回;
timedelta 还支持很多参数,如下,如果多个传入,请注意顺序datetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)
timedelta 的值支持负数,例如 days=-1,表示减掉一天。
实例 4:字符串时间转时间戳
import time
def time2stamp(t):
time_array = time.strptime(t, '%Y-%m-%d %H:%M:%S')
print(type(time_array), '->', time_array)
timestamp = time.mktime(time_array)
return timestamp
if __name__ == '__main__':
print('->', time2stamp('2020-12-10 23:34:30'))
<OUTPUT>
<class 'time.struct_time'> -> time.struct_time(tm_year=2020, tm_mon=12, tm_mday=10, tm_hour=23, tm_min=34, tm_sec=30, tm_wday=3, tm_yday=345, tm_isdst=-1)
-> 1607614470.0
对上述代码进行解释:
time.strptime() 函数根据指定的格式把一个时间字符串解析为时间元组,供后续使用;
time.mktime() 接收结构化之后的时间对象作为参数(上面的 time.strptime() 的返回值),返回用秒数来表示时间的浮点数;
实例 5:当前时间转时间戳
import time
form datetime import datetime
def get_now_stamp():
now_time = datetime.now()
return time.mktime(now_time.timetuple())
if __name__ == '__main__':
print('->', get_now_stamp())
<OUTPUT>
-> 1607848078.0
实例 5 不多说,实例 4 搞明白了,理解实例 5 自然不成问题。
实例 6:时间戳转时间
from datetime import datetime
def stamp2time(timestamp):
return datetime.fromtimestamp(timestamp)
if __name__ == '__main__':
print('->', stamp2time(1607614470))
<OUTPUT>
-> datetime.datetime(2020, 12, 10, 23, 34, 30)
对上述代码解释:
datetime.fromtimestamp() 时间戳(int 型)转换为 datetime 类型时间;
以上的方法,建议大家根据自己的需要,封装成工具类,其中实例 4、5、6 是封装好的现成的方法,可以直接使用;这样在使用的时候可以很方便的调用;
当然工具类可以往里面补充很多常用函数,有了这个利器,你开发的效率也会逐渐地快起来。
下面是 strftime 格式符,请笑纳。
**文末福利——推荐一个《Python自动化测试学习交流群》给大家:
请关注+私信回复:"头条" 就可以免费拿到软件测试学习资料,同时进入群学习交流~~