Skip to content

python中的时间处理非常方便,比java自带的api要方便些,日期时间处理方便可以控制时间间隔获取到指定时间,比如一年前,一周前,两天后等。而时间处理则主要是时间戳的处理,将时间戳转换成localtime易于阅读,以及和字符串之间的转换等等。先来个小汇总,理理思路。

需求实现
获取当前时间datetime.now()
时间间隔datetime.timedelta()
获取一天后的时间datetime.now() + timedelta(days=1)
datetime➡字符串datetime.strftime('%Y-%m-%d %H:%M:%S') 或
字符串➡datetimedatetime.strptime(日期字符串, '%Y-%m-%d %H:%M:%S') 或
获取当前时间戳time.time()datetime.timestamp(datetime.now(),如果需要毫秒级别则*1000
创建localtime对象time.localtime(时间戳),默认传递当前时间戳
localtime➡字符串time.strftime('%Y-%m-%d %H:%M:%S', localtime对象)
字符串➡localtimetime.strptime('2022-12-25 11:51:42','%Y-%m-%d %H:%M:%S')
暂停程序time.sleep(秒)

当前时间与时间间隔

获取时间间隔:timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

参数含义
days需要间隔的天数
seconds分钟数
microseconds毫秒数
milliseconds微秒数
minutes分钟数
hours小时
weeks

不得不说,时间方面确实比java用起来更方便,来看看是如何使用的:

python
from datetime import datetime
from datetime import timedelta

print(datetime.now())  # 当前时间

after_days = datetime.now() + timedelta(days=10)  # 获取10天后的时间
before_hours2 = datetime.now() - timedelta(hours=2)  # 获取两个小时前的时间
before_hours3 = datetime.now() + timedelta(hours=-3)  # 获取3个小时前的时间

时间与字符串相互转换

日期转字符:日期.strftime

python
from datetime import datetime
str_date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 当前日期转为字符串

字符串转日期:

python
from datetime import datetime
d_str = '2022-01-01 14:00:00'
my_date = datetime.strptime(d_str, '%Y-%m-%d %H:%M:%S')  # 字符串转日期

时间格式字符:

字符介绍
%Y年份
%m月份,1~12
%d月中的某一天,1~31
%H一天中的第几小时,00~23
%M第几分钟,00~59
%S第几秒,00~61,瑞年多占两秒
%f毫秒
%I一天中的第几小时,12小时制,01~12

上述是常用的时间格式字符串,还有一些特殊场景下需要使用的:

字符介绍
%a简化的星期,如星期三 Wed
%A完整的星期,如星期三 Wednesday
%b简化的月份,如二月 Feb
%B完整的月份,如二月 February
%c本地的日期和时间,如 Sun Dec 25 11:26:02 2022
%p显示上午或下午,AM代表上午,PM代表下午
%j一年中的第几天
%U一年中的星期数

时间time的处理

时间戳:1970年1月1日00时00分00秒至今的总毫秒(秒)数,使用time.time()可以生成秒级别的时间戳。

python
import time
t1 = time.time()         # 1671939766.5324137
t2 = time.time() * 1000  # 转换成毫秒,1671939766532.4138

本地时间函数localtime

python
import time
print(time.localtime())             # 默认传递当前时间的时间戳,打印输出 
print(time.localtime(time.time()))  # 传入时间戳创建localtime对象

两天输出语句输出的都是time.struct_time(tm_year=2022, tm_mon=12, tm_mday=25, tm_hour=11, tm_min=34, tm_sec=10, tm_wday=6, tm_yday=359, tm_isdst=0)

属性介绍取值范围
tm_year四位数字
tm_mon1~12
tm_mday1~31
tm_hour小时0~23
tm_min分钟0~59
tm_sec0~61(闰月问题)
tm_wday一周的第几天0~6(0代表周一)
tm_yday一年的第几日1~366
tm_isdst夏令时-1,0,1 是否是夏令时

time与字符串间转换

转换为字符串:strftime(格式化,localtime对象)

python
import time
str_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())

转换为localtime对象:strptime(字符串格式的日期,格式化)

python
time_obj = time.strptime('2022-12-25 11:51:42','%Y-%m-%d %H:%M:%S')

datetime时间戳相关

datetime调用timestamp也可以生成时间戳。

python
from datetime import datetime
print(datetime.timestamp(datetime.now()))

时间戳转datetime

python
from datetime import datetime
datetime.fromtimestamp(时间戳)

程序暂停sleep

可以将程序睡眠一段时间,time.sleep(秒)

python
import time
print(time.time())      # 1671939897.6375787
time.sleep(3)           # 暂停3秒再执行
print(time.time())      # 1671939902.6379864