python中的日期时间处理类——datetime
本文梳理了 python 中的日期时间处理类 datetime,记录了一些日常用法。
UTC#
GMT: Greenwich Mean TimeUTC: Universal Time Coordinated
UTC – The World's Time Standard
UTCis A Standard, Not a Time Zone;GMTis now a Time Zone.
Coordinated Universal Time (UTC, GMT, CUT)
时间服务器:
Epoch Converter:
- Unix Timestamp - Epoch Converter
- Unix Time Stamp - Epoch Converter
- Epoch Converter - Unix Timestamp Converter
- Convert Epoch/Unix Timestamp
datetime#
NAME
datetime - Fast implementation of the datetime type.
CLASSES
builtins.object
date
datetime
time
timedelta
tzinfo
timezone
class datetime.date
- An idealized naive date, assuming the current Gregorian calendar always was, and always will be, in effect. Attributes: year, month, and day.
class datetime.time
- An idealized time, independent of any particular day, assuming that every day has exactly 246060 seconds. (There is no notion of “leap seconds” here.) Attributes: hour, minute, second, microsecond, and tzinfo.
class datetime.datetime
- A combination of a date and a time. Attributes: year, month, day, hour, minute, second, microsecond, and tzinfo.
class datetime.timedelta
- A duration expressing the difference between two date, time, or datetime instances to microsecond resolution.
now & today#
调用 datetime.datetime 的 now() 或 today() 返回当前时间:
>>> dt_now = datetime.datetime.now()
>>> dt_now
datetime.datetime(2025, 11, 10, 22, 0, 35, 665900)
>>> dt_today = datetime.datetime.today()
>>> dt_today
datetime.datetime(2025, 11, 10, 22, 1, 10, 516142)
调用 datetime.date.today() 返回今日 datetime.date 对象:
调用 datetime.datetime.combine() 方法,将 date 对象和 time 对象(默认构造零点)合并为 datetime 对象:
>>> dt_today = datetime.datetime.combine(d_today, datetime.time())
>>> dt_today
datetime.datetime(2025, 11, 10, 0, 0)
strftime#
strftime: Return a string representing the datetime/date
- datetime.strftime(format)
- date.strftime(format)
datetime 和 date 对象都支持 strftime() 方法,按格式输出日期字符串:
>>> import datetime
>>> datetime_now = datetime.datetime.now()
>>> datetime_now
datetime.datetime(2018, 4, 24, 15, 51, 2, 399371)
>>> datetime_now.strftime('%Y-%m-%d %H:%M:%S')
'2018-04-24 15:51:02'
type-specific formatting 等效写法:
>>> import datetime
>>> d=datetime.datetime(2018, 4, 25, 13, 0, 0)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2018-04-25 13:00:00'
strptime#
strptime: Return a datetime/date corresponding to date_string, parsed according to format.
- classmethod datetime.strptime(date_string, format)
- classmethod date.strptime(date_string, format)
datetime 和 date 对象都支持 strptime() 方法,从日期字符串按格式构造 datetime/date 对象:
>>> datetime_now = datetime.datetime.strptime('20180424', '%Y%m%d')
>>> datetime_begin = datetime.datetime.strptime('20180323', '%Y%m%d')
>>> datetime_count = datetime_now-datetime_begin
>>> datetime_count
datetime.timedelta(32)
>>> datetime_count.days
32
fromisoformat#
Return a datetime/date corresponding to a date_string in any valid ISO 8601 format.
- classmethod datetime.fromisoformat(date_string)
- classmethod date.fromisoformat(date_string)
datetime 和 date 对象都支持 fromisoformat() 方法,从日期字符串构造 datetime/date 对象:
>>> datetime.datetime.fromisoformat('2011-11-04')
datetime.datetime(2011, 11, 4, 0, 0)
>>> datetime.datetime.fromisoformat('20111104')
datetime.datetime(2011, 11, 4, 0, 0)
>>> datetime.datetime.fromisoformat('2011-11-04T00:05:23')
datetime.datetime(2011, 11, 4, 0, 5, 23)
>>> datetime.date.fromisoformat('2019-12-04')
datetime.date(2019, 12, 4)
>>> datetime.date.fromisoformat('20191204')
datetime.date(2019, 12, 4)
timestamp#
Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数(不考虑闰秒),是一个浮点数。
英文为 Unix time, POSIX time, Unix epoch 或 Unix timestamp。
- The Current Epoch Unix Timestamp: Seconds since Jan 01 1970. (UTC)
- The Unix epoch is the number of seconds that have elapsed since January 1, 1970 at midnight UTC time minus the leap seconds.
time和datetime都是Python中的内置模块,都可以对时间进行获取,对时间格式进行转换,如时间戳和时间字符串的相互转换。
time#
time 模块定义的 time() 函数返回当前时间,是一个秒级时间戳浮点数。
FUNCTIONS
time(...)
time() -> floating point number
Return the current time in seconds since the Epoch.
对于 time() 返回的秒级时间戳,乘以1000即可求得毫秒级:
import time, math
sTimestamp = time.time() # 6位小数
print(sTimestamp)
msTimestamp = time.time() * 1000
print(msTimestamp)
print(math.floor(msTimestamp)) # 向下取整,忽略us
print(round(msTimestamp)) # 四舍五入
运行输出:
基于 time_ns() 接口返回高精度的纳秒级时间戳,来换算更粗粒度的毫秒单位,可能更为合理:
import time
sTimestamp = time.time() # 秒,6位小数
print(sTimestamp)
nsTimestamp = time.time_ns() # 纳秒
print(nsTimestamp)
msTimestamp = nsTimestamp / (1000 * 1000) # 毫秒
print(msTimestamp)
datetime#
class datetime 的实例方法 timestamp():Return POSIX timestamp as float.
import datetime;
current_time = datetime.datetime.now()
time_stamp = current_time.timestamp()
print("timestamp:", time_stamp)
也可调用类方法 datetime.timestamp(dt),其中dt为datetime对象实例:
from datetime import datetime
now = datetime.now()
timestamp = datetime.timestamp(now)
print("timestamp =", timestamp)
fromtimestamp#
classmethod datetime.fromtimestamp(timestamp, tz=None)
Return the local date and time corresponding to the POSIX timestamp, such as is returned by time.time().
也可调用类方法 datetime.timestamp(ts),其中ts为秒级时间戳:
timedelta#
>>> # 获取当前时间
>>> d0 = datetime.datetime.now()
>>> d0
datetime.datetime(2018, 4, 26, 22, 37, 55, 465668)
>>> # 基于日期字符串创建日期对象
>>> str_begin_date = '20180314'
>>> d1 = datetime.datetime.strptime(str_begin_date, '%Y%m%d')
>>> d2 = datetime.datetime(2018,2,2)
>>> # 计算日期相隔天数
>>> dd1=d0-d1
>>> dd1.days
43
>>> dd2=d1-d2
>>> dd2.days
40
>>> # 计算32天前的日期
>>> d3 = d0 - datetime.timedelta(days=32)
>>> d3
datetime.datetime(2018, 3, 25, 22, 37, 55, 465668)
假设有一个工单在明天过期,下面基于 datetime 来统计剩余天数。
由于现在不是今日零点,因此计算日期差不足 1 天:
>>> today = datetime.datetime.today()
>>> today
datetime.datetime(2018, 4, 26, 22, 37, 55, 465668)
>>> due_date = datetime.datetime.strptime('2018-04-27', '%Y-%m-%d')
>>> delta = due_date - today
>>> delta.days
0
如果要计算整点天数,需要取今日零点 datetime:
>>> d_today = datetime.date.today() # datetime.datetime.today().date()
>>> dt_today = datetime.datetime.combine(d_today, datetime.time())
>>> dt_due = datetime.datetime.fromisoformat('2018-04-27')
>>> delta = dt_due - dt_today
>>> delta.days
1
基于 date 计算最合适:
>>> d_today = datetime.date.today()
>>> d_due = datetime.date.fromisoformat('2018-04-27')
>>> delta = d_due - d_today
>>> delta.days
1
Examples#
- Examples of Usage: date
- Examples of Usage: datetime
- Examples of Usage: time
- Examples of usage: timedelta