python 基本日期和时间类型 datetime

datetime 说明

datetime 模块提供了处理日期和时间的类。它可以帮助你执行日期和时间的计算、转换以及格式化等操作。模块包含了日期(date)、时间(time)、日期时间(datetime)、时间间隔(timedelta)、时区(tzinfo)等类。
datetime 类:用于操作日期和时间的类,包括年、月、日、时、分、秒等信息。

date 类:表示日期的类,包括年、月、日。

time 类:表示时间的类,包括时、分、秒、微秒。

timedelta 类:表示时间间隔的类,用于计算日期时间之间的差异。

date

描述:用于表示日期。
用法:atetime.date(year, month, day)
        year:年份
        month:月份
        day:日期
参数范围:
    MINYEAR <= year <= MAXYEAR
    1 <= month <= 12
    1 <= 日期 <= 给定年月对应的天数
from datetime import date

# 创建一个日期对象
d = date(2024, 4, 15)  # 表示 2024 年 4 月 15 日

# 获取当前日期
d2 = date.today()

# 访问日期对象的属性
print("年份:", d.year)  # 输出: 2024
print("月份:", d.month)  # 输出: 4
print("日期:", d.day)  # 输出: 15
print(d)              # 输出: 2024-04-15
print(d2)             # 输出: 2024-04-17

time

描述:用于表示时间。
用法:datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
        hour:小时
        minute:分钟
        second:秒
        microsecond:微秒
参数范围:
    0 <= hour < 24,
    0 <= minute < 60,
    0 <= second < 60,
    0 <= microsecond < 1000000,
    fold in [0, 1].
from datetime import time

# 创建一个时间对象
t = time(9, 30, 15, 500000)  # 表示 9:30:15.500000

# 访问时间对象的属性
print("小时:", t.hour)  # 输出: 小时: 9
print("分钟:", t.minute)  # 输出: 分钟: 30
print("秒:", t.second)  # 输出: 秒: 15
print("微秒:", t.microsecond)  # 输出: 微秒: 500000
print("时间字符串:", t.strftime("%H:%M:%S"))  # 输出: 时间字符串: 09:30:15
print(t)            # 输出: 09:30:15.500000

datetime

描述: datetime.datetime 类表示具体的日期和时间,包括年、月、日、时、分、秒等信息。可以使用这个类来执行日期时间的计算、比较和格式化操作。
用法:datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)。 year, month 和 day 参数是必须的。 tzinfo 可以是 None 或者是一个 tzinfo 子类的实例。如果参数超出范围,则抛出 ValueError 异常。
参数范围:
    MINYEAR <= year <= MAXYEAR,
    1 <= month <= 12,
    1 <= day <= 指定年月的天数,
    0 <= hour < 24,
    0 <= minute < 60,
    0 <= second < 60,
    0 <= microsecond < 1000000,
    fold in [0, 1].

datetime.today()

返回表示当前时区的 datetime 对象,其中 tzinfo 为 None。
from datetime import datetime

# 获取当前时间
now = datetime.today()
print(now)      # 输出: 2024-04-17 16:57:46.834241

datetime.now() 

返回表示当前时区的 date 和 time 对象。
from datetime import datetime

# 获取当前时间
now = datetime.now(tz=None)
print(now)      # 输出: 2024-04-17 17:00:17.236580

datetime.fromtimestamp()

用法: datetime.fromtimestamp(timestamp, tz=None) 。 
    timestamp:要转换的时间戳,可以是浮点数或整数,代表从1970-01-01 00:00:00开始的秒数。
    tz:可选参数,表示时区信息。
返回值: 返回一个 datetime 对象,表示从时间戳转换而来的日期时间。
from datetime import datetime

# 时间戳
timestamp = 1613541710  # 假设一个时间戳

# 根据时间戳创建 datetime 对象
dt_object = datetime.fromtimestamp(timestamp)

print("日期时间:", dt_object)   # 输出: 日期时间: 2021-02-17 14:01:50

datetime.combine() 

描述:是 datetime 模块中的一个方法,用于将给定的日期对象和时间对象结合在一起,形成一个新的 datetime 对象。
用法:datetime.combine(date, time, tzinfo=time.tzinfo)。
       date:日期对象,表示年、月、日。
       time:时间对象,表示时、分、秒等。
       tzinfo:可选参数,表示时区信息,默认为 time.tzinfo。     
from datetime import datetime, date, time

# 创建日期对象
d = date(2024, 4, 15)

# 创建时间对象
t = time(12, 30, 0)

# 合并日期和时间对象
dt_combined = datetime.combine(d, t)

print("合并后的日期时间:", dt_combined)   # 输出: 合并后的日期时间: 2024-04-15 12:30:00

datetime.replace()

描述:用于创建一个新的日期时间对象,其中部分属性被替换为新的值。它允许你在不改变原始对象的情况下,创建一个新的日期时间对象,并指定想要更改的部分。
用法:datetime.replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)
from datetime import datetime

# 创建一个日期时间对象
my_datetime = datetime(year=2024, month=4, day=17, hour=10, minute=30)

# 替换日期为5月1日,保持时间不变
new_datetime = my_datetime.replace(month=5, day=1)

# 输出结果
print("原始日期时间:", my_datetime)       # 输出: 原始日期时间: 2024-04-17 10:30:00
print("替换后的日期时间:", new_datetime)   # 输出: 替换后的日期时间: 2024-05-01 10:30:00

datetime.timestamp()

描述:用于将给定的日期时间对象转换为 POSIX 时间戳。POSIX 时间戳是指从公元 1970 年 1 月 1 日开始至特定日期时间的秒数。
用法:datetime.timestamp()
from datetime import datetime

# 创建一个日期时间对象
my_datetime = datetime(year=2024, month=4, day=17, hour=10, minute=30)

# 将日期时间对象转换为时间戳
timestamp = my_datetime.timestamp()

# 输出结果
print("日期时间对象:", my_datetime)   # 输出: 日期时间对象: 2024-04-17 10:30:00
print("时间戳:", timestamp)          # 输出: 时间戳: 1713321000.0

示例

from datetime import datetime

# 创建一个日期时间对象
my_date = datetime(2024, 4, 17)  # 2024年4月17日是星期三

# 使用weekday()方法获取对应的星期几,返回值为0-6(星期一到星期日)
weekday_num = my_date.weekday()

# 使用isoweekday()方法获取对应的星期几,返回值为1-7(星期一到星期日)
iso_weekday_num = my_date.isoweekday()

# 使用isocalendar()方法返回一个三元组(年,周数,周的天)
iso_calendar = my_date.isocalendar()

print(f"{my_date.strftime('%Y-%m-%d')} 是 星期{weekday_num}")    # 输出: 2024-04-17 是 星期2
print(f"{my_date.strftime('%Y-%m-%d')} 是 星期{iso_weekday_num}") # 输出: 2024-04-17 是 星期3
print(f"{my_date.strftime('%Y-%m-%d')} 是 公历{iso_calendar}")    # 2024-04-17 是 公历datetime.IsoCalendarDate(year=2024, week=16, weekday=3)

timedelta

描述:用于表示时间间隔(timedelta)。
用法:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
        days:表示时间间隔的天数部分。
        seconds:表示时间间隔的秒数部分,不包括天数部分。
        microseconds:表示时间间隔的微秒数部分,不包括天数和秒数部分。
参数单位的换算规则:
    1毫秒会转换成1000微秒。
    1分钟会转换成60秒。
    1小时会转换成3600秒。
    1星期会转换成7天。
参数范围:
    0 <= microseconds < 1000000
    0 <= seconds < 3600*24 (一天的秒数)
    -999999999 <= days <= 999999999
from datetime import datetime, timedelta

# 创建一个时间间隔对象
delta = timedelta(days=5, hours=3, minutes=30)

# 执行日期时间的加法运算
current_datetime = datetime.now()
future_datetime = current_datetime + delta

print("当前日期时间:", current_datetime)            # 当前日期时间: 2024-04-17 17:34:57.033476
print("5天3小时30分钟后的日期时间:", future_datetime) # 5天3小时30分钟后的日期时间: 2024-04-22 21:04:57.033476

tzinfo

用于处理时区信息。
from datetime import datetime, timedelta, tzinfo

class CustomTimeZone(tzinfo):
    def utcoffset(self, dt):
        return timedelta(hours=5)  # 自定义时区偏移为+5小时

    def dst(self, dt):
        return timedelta(0)  # 不使用夏令时

    def tzname(self, dt):
        return "Custom Time Zone"  # 返回时区名字为 Custom Time Zone

# 创建一个自定义时区信息实例
custom_tz = CustomTimeZone()

# 创建一个带有自定义时区信息的日期时间对象
custom_datetime = datetime(2024, 4, 17, 12, 30, 0, tzinfo=custom_tz)

# 输出带有自定义时区信息的日期时间
print("自定义时区日期时间:", custom_datetime)      # 自定义时区日期时间: 2024-04-17 12:30:00+05:00
print("时区偏移:", custom_datetime.utcoffset())  # 时区偏移: 5:00:00
print("时区名称:", custom_datetime.tzname())     # 时区名称: Custom Time Zone

strptime 和 strftime

用于日期时间的解析和格式化。
 

strftime

strptime

用法

根据给定的格式将对象转换为字符串

将字符串解析为给定相应格式的 datetime 对象

方法类型

实例方法

类方法

方法

date; datetime;time

datetime

签名

strftime(format)

 strptime(date_string,format)

from datetime import datetime

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

# 格式化 datetime
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print("Formatted datetime:", formatted)  # 输出: 2024-04-17 08:38:16.670725+00:00

# 从字符串解析 datetime
parsed = datetime.strptime("2024-04-15 14:30", "%Y-%m-%d %H:%M")
print("Parsed datetime:", parsed)        # 输出: 2024-04-17 16:38:16.670725+08:00

日期格式化标识符

%Y:四位数年份(例如:2024)
%m:带前导零的月份(01 至 12)
%d:带前导零的日期(01 至 31)
%A:完整星期名称(如 Monday)
%B:完整月份名称(如 January)

时间格式化标识符

%H:24小时制的小时数(00 至 23)
%I:12小时制的小时数(01 至 12)
%M:分钟数(00 至 59)
%S:秒数(00 至 59)
%p:AM 或 PM

其他标识符

%a:简写星期名称(如 Mon)
%b 或 %h:简写月份名称(如 Jan)
%c:完整的日期时间表示
%x:按本地设置的日期
%X:按本地设置的时间

参考文档

https://docs.python.org/zh-cn/3.12/library/datetime.html#/module-datetime

posted @ 2024-05-13 09:27  小吉猫  阅读(872)  评论(0编辑  收藏  举报