目录

  • 一、前言
  • 二、处理日期
  • 三、处理时间
  • 四、同时处理日期和时间
  • 五、时间戳相关
  • 六、处理字符串格式的时间


一、前言

python中处理时间相关的库为datetime及time,均为内置库,绝大部份有关时间的操作都可以通过这两个库完成,如日期格式化、日期加减等。

二、处理日期

  1. 获取当前日期
import datetime
# 默认格式 yyyy-mm-dd
print(datetime.date.today())
# 2023-05-20
  1. 手动创建日期
# 创建日期,默认格式 yyyy-mm-dd
dt = datetime.date(2023, 5, 20)
print(dt)
# 2023-05-20
# 获取年、月、天
dt.year
dt.month
dt.day
  1. 求两个日期间相差的天数
date1 = datetime.date(2023, 5, 20)
date2 = datetime.date(2023, 5, 15)
diff = date1 - date2
print(diff.days)
# 5
  1. 向前或后推多少天
dt = datetime.date.today()
dt_ = dt - datetime.timedelta(days=1)
# 等价的写法
# dt_ = dt + datetime.timedelta(days=-1)
print(dt_)
# 2023-05-19
  1. 日期格式化
    需要用到strftime()方法,其返回一个格式化后的字符串

%d 指的是一个月中的某一天。如2023-5-20中, %d 返回 20。
%m 指的是一年中的某个月,注意是小写的m。
%Y 指的是年。字母 Y是大写的。
%y 指的是两位数格式的年份。在2023-5-20中,%y 返回 23。
%a 返回工作日的前三个字母,如 Sun ;
%A 返回工作日的完整名称,如 Sunday;
%b 返回月份的前三个字母,如 Oct ;
%B 返回月份的完整名称,如 October;

dt = datetime.date.today()
print(dt.strftime("%Y/%m-%d"))
# 2023/05-20
print(dt.strftime("%B---%Y-%m-%d")) 
# May---2023-05-20
  1. 将字符串格式的日期转换为日期对象
from datetime import datetime
date_string = "20180809"
format = "%Y%m%d" #specifify the format of the date_string.
dt = datetime.strptime(date_string, format)

三、处理时间

  1. 获取当前时间
import time
# 当前日期和时间
current_time = time.ctime() 
print(current_time)
# Sat May 20 23:01:20 2023

# 只返回当前时间
print(time.strftime("%H:%M:%S"))
# 返回一个字符串 22:58:32
  1. 手动创建一个time对象
t = datetime.time(21, 2, 3)
t.hour
t.minute
t.second
  1. 时间格式化
    %I 将 24 小时时间格式转换为 12 小时格式。
    %p 根据时间值返回 AM PM。
    %H 返回时间值的小时数。
    %M 返回时间值的分钟数,注意是大写的M,日期格式化中月份的小写的m。
    %S 返回时间值的秒数。
print(t.strftime("%I"))
# 09
print(t.strftime("%I:%M:%S"))
# 09:02:03

四、同时处理日期和时间

#获取当前日期和时间,格式 yyyy-mm-dd hh:mm:ss
time = datetime.datetime.now()
print(time)
dt = datetime.datetime(2023, 5, 20, 20, 25, 22)
print(dt)
print(dt.strftime("%Y/%m/%d %H:%M:%S"))
# 2023/05/20 20:25:22

五、时间戳相关

时间戳是指格林威治时间1970年01月01日00时00分00秒开始计算所经过的秒数,是一个浮点数。

  1. 获取时间戳
import time
# 获取当前时间戳
print(time.time())

# 获取指定时间对应的时间戳
dtime = datetime.datetime(2023, 5, 20, 20, 25, 22)
un_time = time.mktime(dtime.timetuple())
print(un_time)
  1. 时间戳转日期
untime = 17845855722
times = datetime.datetime.fromtimestamp(untime)
print(times)
# 2535-07-07 14:08:42

六、处理字符串格式的时间

tss1 = '2023-05-20 11:2:03'
# 转为时间数组
timeArray = time.strptime(tss1, "%Y-%m-%d %H:%M:%S")
# time.struct_time(tm_year=2023, tm_mon=5, tm_mday=20, tm_hour=11, tm_min=2, tm_sec=3, tm_wday=5, tm_yday=140, tm_isdst=-1)
print(timeArray)
# timeArray可以调用tm_year等
print(timeArray.tm_year)  # 2023
# 转为时间戳
timeStamp = int(time.mktime(timeArray))
print(timeStamp)  # 1684551723

其中timeArray为一个结构体,其属性如下:
tm_year (including century, e.g. 1998)
tm_mon (1-12)
tm_mday (1-31)
tm_hour (0-23)
tm_min (0-59)
tm_sec (0-59)
tm_wday 一周中的第几天,注意周一为第0天。
tm_yday 一年中的第多少天
DST 是否为夏令时间,一般用不上。

时间戳转timeArray,以下两种方式等价。

time.localtime()
time.localtime(time.time())