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