【Python datetime模块精讲】:时间旅行者的日志,精准操控日期与时间

avatar
作者
筋斗云
阅读量:1

文章目录

在这里插入图片描述

前言

Python的datetime模块提供了日期和时间的类,用于处理日期和时间的算术运算。这个模块包括date、time、datetime和timedelta等类,以及tzinfo接口和timezone类。date类用于表示年、月、日,而time类表示时间。datetime类结合了日期和时间,提供了一个单一的日期时间对象。timedelta类用于表示两个日期或时间之间的差异。此外,tzinfo接口允许用户定义时区信息,而timezone类提供了时区的实现。datetime模块广泛用于需要日期和时间计算的应用程序,如日志记录、调度和数据时间戳。它的强大功能和灵活性使其成为Python标准库中不可或缺的一部分。

一、datetime模块简介

datetime模块是Python标准库中处理日期和时间的常用模块之一。它提供了日期和时间的表示、比较和运算方法,以及常见的格式化和解析函数。

二、常用类和方法

# datetime模块提供了许多有用的类和方法,下面是其中一些常用的:  # 导入datetime模块 import datetime 
类或方法描述
datetime.date表示一个具体的日期,包括年份、月份和日数
datetime.time表示一个具体的时间,包括小时、分钟、秒和微秒
datetime.datetime表示一个具体的日期和时间,包括日期和时间的所有信息
datetime.timedelta表示两个日期或时间之间的差距
datetime.datetime.today() / datetime.datetime.now()返回表示当前日期和时间的对象
datetime.datetime.fromtimestamp(ts)将时间戳转换为datetime对象
datetime.datetime.strftime(format) / datetime.datetime.strptime(date_string, format)将datetime对象格式化为字符串,或将字符串解析为datetime对象

时间格式化符号

格式描述注释
%Y2021
%y21
%m
%d
%H24小时制(晚上九点:21:00)
%I12小时制(晚上九点:9:00)
%M
%S
%p上午AM 下午 PM

三、date类

# date类表示一个具体的日期,其中包括以下属性: 
属性描述
year年份
month月份
day日数
weekday()返回星期几(0表示星期一,6表示星期日)
isoweekday()返回ISO规定的星期几(1表示星期一,7表示星期日)
isocalendar()返回一个元组,其中包含年份、周数和星期几
strftime(format)将date对象格式化为字符串
# 创建一个date对象: d = datetime.date(year, month, day) 
d = datetime.date(2023, 5, 11) 
  • year属性表示日期对象的年份
  • month属性表示日期对象的月份
  • day属性表示日期对象的日数
  • isoweekday()方法返回ISO规定的星期几,其中1表示星期一,7表示星期日。
  • weekday()方法返回星期几,其中0表示星期一,6表示星期日。
  • isocalendar()方法返回一个元组,其中包含年份、周数和星期几。
import datetime  d = datetime.date(2023, 5, 11) print(d.year) # 2023 print(d.month) # 5 print(d.day) # 11 print(d.isoweekday()) # 4 print(d.weekday()) # 3 print(d.isocalendar()) # (2023, 19, 4) 

在这里插入图片描述

strftime()方法将date对象格式化为字符串。format参数是一个格式化字符串,其中包含特定的代码,代表日期和时间的不同部分。

import datetime   d = datetime.date(2023, 5, 11) s = d.strftime('%Y-%m-%d') print(s)  # 2023-05-11 

在这里插入图片描述

四、time类

# time类表示一个具体的时间,其中包括以下属性: 
属性描述
hour小时
minute分钟
second
microsecond微秒
strftime(format)将time对象格式化为字符串
# 创建一个time对象: t = datetime.time(hour=0, minute=0, second=0, microsecond=0) 
t = datetime.time(10, 0) 
  • hour属性表示时间对象的小时数
  • minute属性表示时间对象的分钟数
  • second属性表示时间对象的秒数
  • microsecond属性表示时间对象的微秒数
import datetime  t = datetime.time(10, 30, 15, 500000) print(t.hour)  # 10 print(t.minute) # 30 print(t.second)  # 15 print(t.microsecond)  # 500000 

在这里插入图片描述

# strftime()方法将time对象格式化为字符串。format参数是一个格式化字符串,其中包含特定的代码,代表日期和时间的不同部分。  import datetime  t = datetime.time(10, 30, 15) s = t.strftime('%H:%M:%S') print(s)  # 10:30:15 

在这里插入图片描述

五、datetime类

# datetime类表示一个具体的日期和时间,其中包括以下属性: 
属性描述
year年份
month月份
day日数
hour小时
minute分钟
second
microsecond微秒
timestamp()返回时间戳(自1970年以来的秒数)
weekday()返回星期几(0表示星期一,6表示星期日)
isoweekday()返回ISO规定的星期几(1表示星期一,7表示星期日)
isocalendar()返回一个元组,其中包含年份、周数和星期几
strftime(format)将datetime对象格式化为字符串
#v创建datetime对象 dt = datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond]]]]) 
dt = datetime.datetime(2023, 5, 11, 10, 0) 
  • year属性表示日期时间对象的年份
  • month属性表示日期时间对象的月份
  • day属性表示日期时间对象的日数
  • hour属性表示日期时间对象的小时数
  • minute属性表示日期时间对象的分钟数
  • second属性表示日期时间对象的秒数
  • microsecond属性表示日期时间对象的微秒数
import datetime  dt = datetime.datetime(2023, 5, 11, 10, 30, 15, 500000) print(dt.year)  # 2023 print(dt.month) # 5 print(dt.day) # 11 print(dt.hour) # 10 print(dt.minute) # 30 print(dt.second) # 15 print(dt.microsecond) # 500000 

在这里插入图片描述

  • timestamp()方法返回自1970年1月1日以来的秒数
  • weekday()方法返回星期几,其中0表示星期一,6表示星期日。
  • isoweekday()方法返回ISO规定的星期几,其中1表示星期一,7表示星期日
  • isocalendar()方法返回一个元组,其中包含年份、周数和星期几。
  import datetime  dt = datetime.datetime(2023, 5, 11, 10, 30, 15)   print(dt.timestamp() ) # 1686790215.0 print(dt.weekday()) # 3 print(dt.isoweekday()) # 4 print(dt.isocalendar()) # (2023, 19, 4) 

在这里插入图片描述

strftime()方法将datetime对象格式化为字符串。format参数是一个格式化字符串,其中包含特定的代码,代表日期和时间的不同部分。

import datetime  dt = datetime.datetime(2023, 5, 11, 10, 30, 15) s = dt.strftime('%Y-%m-%d %H:%M:%S') print(s) # 2023-05-11 10:30:15 

在这里插入图片描述

strptime()方法是将字符串转换为datetime对象的方法。它根据特定的格式化代码将字符串解析为datetime对象。

import datetime  s = '2023-05-11 10:30:15' dt = datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S') print(dt)  # 2023-05-11 10:30:15 

在这里插入图片描述

六、timedelta类

# timedelta类表示两个日期或时间之间的差距,它支持以下属性: 
属性描述
days天数
seconds秒数
microseconds微秒数
total_seconds()返回总秒数
# 创建一个timedelta对象: delta = datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]]) 
delta = datetime.timedelta(days=10) 

timedelta对象的days属性表示天数

import datetime  d1 = datetime.date(2023, 5, 11) d2 = datetime.date(2023, 5, 1) delta = d1 - d2 print(delta.days) # 10 

在这里插入图片描述

timedelta对象的seconds属性表示秒数

import datetime  t1 = datetime.datetime(2023, 5, 11, 10, 30, 15) t2 = datetime.datetime(2023, 5, 11, 10, 0, 0) delta = t1 - t2 print(delta.seconds)  # 1815 
# timedelta对象的microseconds属性表示微秒数  import datetime  t1 = datetime.datetime(2023, 5, 11, 10, 30, 15, 500000) t2 = datetime.datetime(2023, 5, 11, 10, 30, 15) delta = t1 - t2 print(delta.microseconds)  # 500000 
# total_seconds()方法返回总秒数  import datetime  t1 = datetime.datetime(2023, 5, 11, 10, 30, 15) t2 = datetime.datetime(2023, 5, 8, 10, 0, 0) delta = t1 - t2 print(delta)  # 3 days, 0:30:15 print(delta.seconds)  # 1815 print(delta.total_seconds())  # 261015.0 

七、常用的函数和属性

# datetime模块还提供了一些其他有用的函数和属性,下面是其中一些常用的: 
函数或属性描述
datetime.datetime.today() / datetime.datetime.now()返回表示当前日期和时间的对象
datetime.datetime.fromtimestamp(ts)将时间戳转换为datetime对象
datetime.datetime.astimezone(tz=None)返回带有时区信息的datetime对象
datetime.datetime.utcoffset()返回一个datetime对象相对于UTC的偏移量
datetime.date.today()返回表示当前日期的date对象
datetime.datetime.combine(date, time)将一个date对象和一个time对象组合成一个datetime对象
# datetime.datetime.today() / datetime.datetime.now() # 这两个方法都返回表示当前日期和时间的datetime对象。  import datetime  dt_now = datetime.datetime.now() dt_today = datetime.datetime.today()  print(dt_now) print(dt_today)  # 2023-05-11 15:30:15.123456 # 2023-05-11 15:30:15.123456  """ 它们的区别在于,today()方法不接受任何参数,而now()方法可以接受一个可选参数,用于指定时区。如果不指定,则默认使用系统本地时区。 """ 

fromtimestamp()方法将时间戳转换为datetime对象。

# datetime.datetime.fromtimestamp(ts)  import datetime  # ts1 = datetime.datetime.now() # ts = datetime.datetime.now().timestamp() # print(ts1) # print(ts)  ts = 1686790215.0 # 时间戳 dt = datetime.datetime.fromtimestamp(ts)  print(dt)  # 2023-05-12 02:30:15 

astimezone()方法返回带有时区信息的datetime对象,如果tz参数未提供,则默认使用系统本地时区。

# datetime.datetime.astimezone(tz=None)  import datetime  dt = datetime.datetime(2023, 5, 11, 10, 30, 15)  # 将时区从本地修改为UTC+8 tzinfo = datetime.timezone(datetime.timedelta(hours=8)) dt2 = dt.astimezone(tz=tzinfo)  print(dt2)  # 2023-05-11 18:30:15+08:00 

在这里插入图片描述

utcoffset()方法是datetime模块中tzinfo类的一个方法,用于返回一个timedelta对象,表示当前时区相对于协调世界时(UTC)的偏移量。这个方法通常在处理时区相关的日期和时间时使用。

# datetime.datetime.utcoffset() # utcoffset()方法返回一个datetime对象相对于UTC的偏移量。  import datetime dt = datetime.datetime(2023, 5, 11, 10, 30, 15).astimezone() print(dt.utcoffset())  # 8:00:00 

在这里插入图片描述

date.today()方法用于获取当前日期。这个方法不需要任何参数,并返回一个date对象,表示当前的年、月、日。

# datetime.date.today() # today()方法返回表示当前日期的date对象。 import datetime  d_today = datetime.date.today()  print(d_today)  # 2023-05-11 

在这里插入图片描述

combine()方法将一个date对象和一个time对象组合成一个datetime对象。

# datetime.datetime.combine(date, time)  import datetime  d = datetime.date(2023, 5, 11) t = datetime.time(10, 30, 15) dt = datetime.datetime.combine(d, t)  print(dt)  # 2023-05-11 10:30:15 

在这里插入图片描述

八、代码及其演示

# 计算两个日期之间的天数差距 import datetime  d1 = datetime.date(2023, 5, 1) d2 = datetime.date(2023, 5, 11) delta = d2 - d1  print(delta.days)  # 10 

在这里插入图片描述

# 获取当前时间并格式化输出 import datetime  now = datetime.datetime.now() s = now.strftime('%Y-%m-%d %H:%M:%S')  print(s) # 2023-05-11 10:00:00 

在这里插入图片描述

# 将一个字符串解析为datetime对象 import datetime  s = '2023-05-11 10:00:00' dt = datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S')  print(dt)  # 2023-05-11 10:00:00 

在这里插入图片描述

# datetime模块提供了一组强大的工具来处理日期和时间相关的问题,包括日期、时间、日期时间、时间差和格式化等。学会了使用这些工具,我们就可以方便地进行日期和时间相关的计算、比较和格式化,从而使程序更具可读性和可维护性。 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!