Appearance
python中的时间处理非常方便,比java自带的api要方便些,日期时间处理方便可以控制时间间隔获取到指定时间,比如一年前,一周前,两天后等。而时间处理则主要是时间戳的处理,将时间戳转换成localtime易于阅读,以及和字符串之间的转换等等。先来个小汇总,理理思路。
需求 | 实现 |
---|---|
获取当前时间 | datetime.now() |
时间间隔 | datetime.timedelta() |
获取一天后的时间 | datetime.now() + timedelta(days=1) |
datetime ➡字符串 | datetime.strftime('%Y-%m-%d %H:%M:%S') 或 |
字符串➡datetime | datetime.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对象) |
字符串➡localtime | time.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_mon | 月 | 1~12 |
tm_mday | 日 | 1~31 |
tm_hour | 小时 | 0~23 |
tm_min | 分钟 | 0~59 |
tm_sec | 秒 | 0~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