【Python】关于datetime.datetime、timestamp(时间戳)、字符串之间的相互转换以及时间运算(timedelta)的简单使用

  • Post author:
  • Post category:python


前言:

关于datetime这个模块,可以说是平时不用的时候大家相安无事,一到用的时候,便会觉得有点混乱了,所以写下本篇文章,留待以后有需要使用,需要注意的是,文中的代码存在一些冗余,有一些代码片段可以替换为其他的格式或者自己自定义的内容,nevermind,总会有一些帮助的。

datetime.datetime -> str

datetime.datetime.now(tz=None)
>>> datetime.datetime(2022, 1, 20, 16, 45, 36, 424012)
times = datetime.datetime.now(tz=None)
times.strftime("%Y-%m-%d %H:%M:%S")
>>> '2022-01-20 16:50:29'

第一行的参数tz指的是时区,如果是None或者直接省略,则默认使用计算机上的时区

%Y和%y使用效果不同,%Y输出的是年份,输出结果为 2022 ,但是%y输出结果为22


这里一定要注意大小写,不同的大小写代表的 意义不同,当然,倒数第二行代码中的 ‘-‘ 和 ‘:’可以改成自己喜欢的符号

str -> datetime.datetime

import datetime
now = datetime.datetime.now(tz=None)
now = now.strftime("%Y-%m-%d %H:%M:%S")
now
>>> '2022-01-20 18:04:18'
datetime.datetime.strptime(now, "%Y-%m-%d %H:%M:%S")
>>> datetime.datetime(2022, 1, 20, 18, 4, 18)


这里要注意的是,在倒数第二行的代码中,

“%Y-%m-%d %H:%M:%S” 一定要和你传入的时间字符串相符合,否则会报错,例如,你传入的是年月日时分秒的字符串,那么你把它转为datetime.datetime类型时,即在倒数第二行的代码中,你传入的参数中也要符合年月日时分秒,否则就会报错。

datetime.datetime ->timestamp(时间戳)

now = datetime.datetime.now(tz=None)
now
>>> datetime.datetime(2022, 1, 20, 18, 9, 38, 405571)
now.timestamp()
>>> 1642673378.405571

timestamp -> datetime.datetime

now = datetime.datetime.now()
ts = now.timestamp()
ts
>>> 1642673497.35506
datetime.datetime.fromtimestamp(ts,tz=None)
>>> datetime.datetime(2022, 1, 20, 18, 11, 37, 355060)


时间戳无法直接转为str,所以可以通过datetime中转,转换成str


timedelta函数的使用

timedelta函数只能对datetime.datetime类型使用

from datetime import timedelta
now = datetime.datetime.now(tz=None)
now
>>> datetime.datetime(2022, 1, 20, 18, 16, 28, 626153)
now + timedelta(hours = -1)
>>> datetime.datetime(2022, 1, 20, 17, 16, 28, 626153) #小时减一个小时

以上,便可以实现对当前的时间减一个小时,再用上述的datetime.datetime->str中的方法即可查看处理后的字符串类型


对于timedelta中的关键字参数如下:

def __new__(cls, days=0, seconds=0, microseconds=0,
            milliseconds=0, minutes=0, hours=0, weeks=0):
#这是timedelta里面可以使用的关键字参数

你也可以直接看timedelta的源码,关键字参数如上。

结语

这个模块,总有一天会用到,逃不掉的,加油啦兄弟们!



版权声明:本文为GodLordGee原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。