Skip to main content

Python 常用内置模块

Python 内置模块 datetime

Python 中时间处理要用到的模块有这两个 time、datetime,他们两个几乎就可以解决大部分的时间处理了。对时间的处理无非就是在这几个个状态之间进行转换:时间对象、时间字符串、时间戳、时间间隔对象、时间点间隔列表, 后面都会涉及到这些状态之间的转换,首先导入这两个模块。

导入时间模块

import time,datetime

当前时间对象

精确到微秒,可通过全局函数 str 转化成字符串格式

datetime.datetime.now()

str(datetime.datetime.now())
'2023-06-12 16:58:21.004178'

当前时间字符串

自定义字符串格式

datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2023-06-13 22:25:27'

timenow = datetime.datetime.now()
timenow.day
13

timenow.hour
22

当前时间戳

int(time.time())
1686666510

指定时间对象

根据 datetime.timedelta 获取昨天、明天的时间、N天前、N天后。

# 今天:
datetime.date.today()
datetime.date(2017, 11, 30)

# 明天:
datetime.date.today() + datetime.timedelta(days=1)
datetime.date(2017, 12, 1)

# 指定时间:
datetime.datetime(2017,10,26,20,15)
datetime.datetime(2017, 10, 26, 20, 15)

# 指定时间:
strtime = "2017-10-26 20:15:10"
datetime.datetime.strptime(strtime, "%Y-%m-%d %H:%M:%S")
datetime.datetime(2017, 10, 26, 20, 15, 10)

指定间隔对象

datetime.timedelta 表示时间间隔,即两个时间点之间的长度,datetime.timedelta 的参数如果不给定,默认都为零。

datetime.timedelta(days=2, weeks=1, hours=1, minutes=0, seconds=2, milliseconds=0, microseconds=0)
9 days, 1:00:02

时间对象加减

datetime.datetime.now() - datetime.timedelta(days=10)

时间字符串 TO 时间对象

# 普通格式
strtime = "2017-10-26 20:15:10"
datetime.datetime.strptime(strtime, "%Y-%m-%d %H:%M:%S")

# 带时区格式
b = datetime.datetime.strptime('2023-07-03T15:30:00+00:00', '%Y-%m-%dT%H:%M:%S%z')
(b + datetime.timedelta(hours=8)).strftime('%Y-%m-%d %H:%M:%S')

时间字符串 TO 时间戳

# 普通格式字符串
strtime = "2017-10-26 20:15:10"
timearray = time.strptime(strtime, "%Y-%m-%d %H:%M:%S")
timestamp = int(time.mktime(timearray))

时间对象 TO 字符串

datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

时间对象 TO 时间戳

# 方法一
timenow = datetime.datetime.now()
timestamp = int(time.mktime(timenow.timetuple()))

# 方法二 东8区的计算方法
timenow = datetime.datetime.now()
epoch = datetime.datetime(1970, 1, 1, 8, 0, 0)
timestamp = int((timenow - epoch).total_seconds())

时间戳 TO 时间对象

timestamp = 1512033840
datetime.datetime.fromtimestamp(timestamp)

时间戳 TO 时间字符串

timestamp = 1512033840
timearray = time.localtime(timestamp)
pointed_style_time = time.strftime("%Y-%m-%d %H:%M:%S", timearray)

UTC 时间

UTC(世界标准时间)

CST 时间

CST (中国标准时间), 比UTC时间提前8个小时,与UTC的时间偏差可写为+08:00.

ISO-8601标准时间格式化

ISO 8601标准日期和时间格式可以分为以下几种情况:

  • 基本格式: YYYYMMDDThhmmss,例如20240724T143000。
  • 带分隔符格式: YYYY-MM-DDThh:mm:ss,例如2024-07-24T14:30:00。
  • 带时区格式:
    • YYYY-MM-DDThh:mm:ssZ , 例如 2024-07-24T14:30:00Z
    • 或 YYYY-MM-DDThh:mm:ss+|-hh:mm, 例如2024-07-24T14:30:00+08:00
import datetime

# 获取当前时间
now = datetime.datetime.now()

# 格式化为ISO 8601基本格式
now.strftime("%Y%m%dT%H%M%S")  # '20250724T202749'


# 格式化为ISO 8601带分隔符格式
now.strftime("%Y-%m-%dT%H:%M:%S")  # '2025-07-24T20:27:49'


# 格式化为ISO 8601带时区格式 (需要处理时区,这里使用UTC时间)
now_utc = datetime.datetime.utcnow()
now_utc.strftime("%Y-%m-%dT%H:%M:%SZ")  # '2025-07-24T12:28:55Z'


#  获取当前时间并格式化为完整的ISO 8601格式
datetime.datetime.now().isoformat()  # '2025-07-24T20:29:30.758062'


# 解析ISO 8601格式的字符串
date_string = "2024-07-24T14:30:00"
datetime.datetime.fromisoformat(date_string)
# 输出 datetime.datetime(2024, 7, 24, 14, 30)

农历时间

https://github.com/CutePandaSh/zhdate

pip install zhdate