Python 的 datetime 模块

目录

简介

一、date类

(一)date 类属性

(二)date 类方法

(三)实例属性

(四)实例的方法

二、time类

(一)time 类属性

(二)time 实例属性

(三)实例方法

三、datetime类

(一)datetime 类属性

(二)datetime 类方法

(三)实例属性

(四)实例方法

四、timedelta类

(一)timedelta 类属性

(二)timedelta 实例属性

(三)timedelta 实例方法

用法

五、时间类型转换

(一)str 与 datetime 转换

1.str->datetime

2.datetime->str

(二)date/datetime与时间戳转换

1.时间戳->datetime

2.datetime->时间戳

(三)时间戳 timestamp 与字符串转换

1.时间戳->str

2.str->时间戳


简介

        datetime 模块是对 time 模块的封装,这个模块提供了这几个类:date(日期)、time(时间)、datetime(日期时间,功能覆盖前两者)、timedelta(时间差)、tzinfo。文章用于记录模块的常用属性和方法(一些不太常用的可能不会涉及)

        python 里表示时间的格式有三种:时间戳、元组、格式化时间。与time模块类似,datetime 模块也能够将 datetime 类型转换成这三种类型。需要注意的是,str 和时间戳的转换,都需要先转成 datetime,datetime 相当于时间处理的中间桥梁

        对于三种时间表示方式、时间计算标准及 time 模块的使用结合另一篇文章:​​​​​​​python的time模块_python中的time模块_带带琪宝的博客-CSDN博客

一、date类

        datetime.date(year,month,day) 表示年、月、日等日期

from datetime import date
import time

         导包还出现了个报错:因为取的文件名和包名重复了Python报错“ImportError:most likely due to a circular import“记录_importerror: cannot import name 'datetime' from 'p-CSDN博客

(一)date 类属性

  • date.min:该类对象所能表示的最早日期,date(MINYEAR, 1, 1)
print(date.min)
0001-01-01
  • date.max:该类对象所能表示的最晚日期,date(MAXYEAR, 12, 31)
print(date.max)
9999-12-31
  • date.resolution:该类对象表示日期的最小单位,在这里为 1 天,timedelta(days=1)
print(date.resolution)
1 day, 0:00:00

(二)date 类方法

  • date.today():返回一个表示当前本地日期的 date 对象
day=date.today()    # 返回当前格式化的年月日
print(day)
print(type(day))    # date类型

2023-11-08
<class 'datetime.date'>
  • date.fromtimestamp(timestamp):根据给定的时间戮,返回一个 date 对象,可用于时间转换
print(date.fromtimestamp(666666666))
1991-02-16

        时间戳:格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数 

  • date.fromordinal(ordinal):将 Gregorian 日历时间转换为 date 对象(Gregorian Calendar:一种日历表示方法,类似于我国的农历,西方国家使用比较多)

(三)实例属性

        date类的实例有年月日三个属性,即

  • date.year:年,取值1~9999
  • date.month:月,取值1~12
  • date.day:日,取值取决于年和月

(四)实例的方法

        常用的如下

day=date.today()
print(day.year)    # 返回年份2023,也可返回月、日

2023
print(day.replace(1999,4,26))    # 修改时间
1999-04-26
print(day.timetuple())    # 返回时间元组
time.struct_time(tm_year=2023, tm_mon=11, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=312, tm_isdst=-1)
print(day.weekday())    # 返回星期几(由0开始)
2

print(day.isoweekday())    # 返回星期几(由1开始)
3
print(day.isoformat())    # 以'YYYY-MM-DD'形式字符串返回
2023-11-08

原自:python的datetime库使用详解_流光、月影的博客-CSDN博客

二、time类

        time 对象表示一天中某时间

(一)time 类属性

  • time.min:time 对象所能表示的最早时间,time(0, 0, 0, 0)
print(time.min)
00:00:00
  • time.max:time 对象所能表示的最晚时间,time(23, 59, 59, 999999)
print(time.max)
23:59:59.999999
  • time.resolution:time 对象表示时间的最小单位,这里为1微秒,timedelta(microseconds=1).
print(time.resolution)
0:00:00.000001

(二)time 实例属性

  • time.hour:小时,取值0 ~ 23
  • time.minute:分钟,取值0 ~ 59
  • time.second:秒,取值0 ~ 59
  • time.microsecond:微秒,取值0~999999
  • time.tzinfo
datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

(三)实例方法

t=time(hour=20, minute=30, second=14, microsecond=6666, tzinfo=None)
print(time.isoformat(t))    # 返回格式化日期字符串,如 "HH:MM:SS.mmmmmm" 的字符串

20:30:14.006666

三、datetime类

        datetime.datetime() 表示日期和时间表示的类,是 date 对象和 time 对象的结合体,包含他们的所有信息,功能也覆盖 date 和 time 类

(一)datetime 类属性

  • datetime.min:datetime 对象所能表示的最早时间,datetime(MINYEAR, 1, 1, tzinfo=None)
print(datetime.min)
0001-01-01 00:00:00
  • datetime.max:datetime 对象所能表示的最晚日期,datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)
print(datetime.max)
9999-12-31 23:59:59.999999
  • datetime.resolution:datetime 对象表示日期的最小单位,在这里是 1 毫秒,timedelta(microseconds=1)
print(datetime.resolution)
0:00:00.000001

(二)datetime 类方法

  • datetime.today():返回表示当前本地时间的 datetime 对象,等价于datetime.fromtimestamp(time.time())
  • datetime.now(tz=None):返回表示当前本地时间的 datetime 对象,参数 tz 为时区
  • datetime.utcnow():返回一个当前 UTC 时间的 datetime 对象
print(datetime.today())
print(datetime.now())
print(datetime.utcnow())

2023-11-09 17:47:16.834907
2023-11-09 17:47:16.835902
2023-11-09 09:47:16.835902
  • datetime.fromtimestamp(timestamp, tz=None):根据时间戮创建一个 datetime 对象,参数 tz 指定时区信息
  • datetime.utcfromtimestamp(timestamp):根据时间戮创建一个 UTC 时间的 datetime 对象
print(datetime.fromtimestamp(2222222222, tz=None))
print(datetime.utcfromtimestamp(2222222222))

2040-06-02 11:57:02
2040-06-02 03:57:02
  • datetime.combine(date, time):根据参数 date 和 time,创建一个 datetime 对象
  • datetime.strptime(date_string, format):将格式化字符串转换为 datetime 对象

(三)实例属性

datetime (year, month, day, hour=0, minute=0,second=0, microsecond=0)
  • year:指定的年份,MINYEAR(1) <= year <= MAXYEAR(9999)
  • month:指定的月份,1 <= month <= 12
  • day:指定的日期,1 <= day <=月份所对应的日期上限
  • hour:指定的小时,0 <= hour < 24
  • minute:指定的分钟数,0 <= minute < 60
  • second:指定的秒数,0 <= second < 60
  • microsecond:指定的微秒数,0 <= microsecond < 1000000

        hour、minute、second、microsecond 参数可以全部或部分省略。

(四)实例方法

        datetime 具有绝大多数 date 和 time的属性,参考上方 time 与 date 的实例方法

  • datetime.date():返回对象的日期,即年月日
  • datetime.time():返回对象的时间,即时分秒、微秒
dt=datetime (year=2023, month=12, day=25, hour=20, minute=30,second=15, microsecond=6666)
print(dt)
print(dt.date())
print(dt.time())

2023-12-25 20:30:15.006666
2023-12-25
20:30:15.006666

四、timedelta类

        timedelta 表示的是一个时间段,即两个日期 date 或者日期时间 datetime 之间的差,Python 中 pandas 与 datetime 的 timedelta 可以相互换算

datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) 

(一)timedelta 类属性

  • timedelta.min:timedelta 对象负值的极限,timedelta(-999999999)
print(timedelta.min)
-999999999 days, 0:00:00
  • timedelta.max:timedelta 对象正值的极限,timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
print(timedelta.max)
999999999 days, 23:59:59.999999
  • timedelta.resolution:两个 timedelta 不相等的对象之间最小的差值,即一微秒
print(timedelta.resolution)
0:00:00.000001

(二)timedelta 实例属性

datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) 

        timedelta 的实例属性有日期、秒、微秒,其他参数都是需要转换的

  • timedelta.days:天数,取值 -999999999 ~ 999999999
  • timedelta.seconds:秒数,取值0 ~ 86399(1小时秒数 * 一天24小时,进行进位)
  • timedelta.microseconds:微秒,取值 0 ~ 999999

(三)timedelta 实例方法

  • timedelta.total_seconds():返回 timedelta 对象所包含的总秒数

用法

1.

t1=datetime.now() # 当前时间
t2=datetime (year=1999, month=4, day=26, hour=0, minute=0,second=0, microsecond=0) 
# 构造一个时间
print(t1)
print(t2)
print(timedelta.total_seconds(t1-t2)) # 进行运算

2023-11-10 12:32:47.457375
1999-04-26 00:00:00
774534767.457375

2.

t1=datetime.now()
t2=timedelta(days=1)
print(t1)
print(t2)
print(t1+t2) # 加一天

2023-11-10 13:41:33.859151
1 day, 0:00:00
2023-11-11 13:41:33.859151

五、时间类型转换

        主要是 datetime,str,时间戳之间的转换

        python中时间日期格式化符号:

  • %a:星期的简写(星期一 ~ 天:Mon, Tue, Wed, Thu, Fri, Sat, Sun)
  • %A :星期的全写(星期一 ~ 天:Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)
  • %w:在一个星期中的第几天( 0 表示星期天 ... 6 表示星期六)
  • %d:在一个月中的第几天(01, 02, ..., 31)
  • %b:月份的简写(一月 ~ 十二月:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
  • %B: 月份的全写(一月 ~ 十二月:January, February, March, April, May, June, July, August, September, October, November, December)
  • %m:月份(01, 02, ..., 12)
  • %y:用两个数字表示年份(例如 2014年 == 14)
  • %Y:用四个数字表示年份
  • %H:二十四小时制(00, 01, ..., 23)
  • %I:十二小时制(01, 02, ..., 11)
  • %p:AM 或者 PM
  • %M:分钟(00, 01, ..., 59)
  • %S:秒(00, 01, ..., 59)
  • %f:微秒(000000, 000001, ..., 999999)
  • %z:与 UTC 时间的间隔 ;如果是本地时间,返回空字符串((empty), +0000, -0400, +1030)
  • %Z:时区名称;如果是本地时间,返回空字符串((empty), UTC, EST, CST)
  • %j:在一年中的第几天(001, 002, ..., 366)
  • %U:在一年中的第几周,星期天作为第一天(00, 01, ..., 53)
  • %W:在一年中的第几周,星期一作为第一天(00, 01, ..., 53)
  • %c:用字符串表示日期和时间(Tue Aug 16 21:30:00 2014)
  • %x:用字符串表示日期(08/16/14)
  • %X:用字符串表示时间(21:30:00)
  • %%:表示百分号

(一)str 与 datetime 转换

1.str->datetime

  • 使用 datetime.strptime()
a = '1999-04-01 10:15:55'
b = datetime.strptime(a,'%Y-%m-%d %H:%M:%S')
print(a)
print(b)
print(type(a))
print(type(b))

1999-04-01 10:15:55
1999-04-01 10:15:55
<class 'str'>
<class 'datetime.datetime'>

2.datetime->str

  • 使用 datetime.strftime()
today = datetime.now()
s=today.strftime('%Y-%m-%d %H:%M:%S:%f')
print(today)
print(s)
print(type(today))
print(type(s))

2023-11-10 14:37:13.912090
2023-11-10 14:37:13:912090
<class 'datetime.datetime'>
<class 'str'>

(二)date/datetime与时间戳转换

        需要借助 time 中时间戳方法

1.时间戳->datetime

  • 使用 datetime.fromtimestamp()
import time

t=time.time()    # 可以获得当前时间戳
print(t)
print(datetime.fromtimestamp(t))

1699601829.9119656
2023-11-10 15:37:09.911966

2.datetime->时间戳

  • 使用 datetime.timestamp()
t=datetime.timestamp(datetime.now())
print(t)
print(datetime.fromtimestamp(t))

1699602673.122222
2023-11-10 15:51:13.122222

(三)时间戳 timestamp 与字符串转换

        字符串与时间戳不能直接进行转换,需要借助 datetime 作为桥梁

1.时间戳->str

        时间戳->datetime->str

d=datetime.timestamp(datetime.now()) # 获得一个时间戳
s=datetime.strftime(datetime.fromtimestamp(d),'%Y-%m-%d %H:%M:%S')  # 时间戳->datetime->str 
print(d)
print(s)
print(type(d))
print(type(s))

1699603804.461055
2023-11-10 16:10:04
<class 'float'>
<class 'str'>

2.str->时间戳

        str->datetime->时间戳

s='20231225'    # 字符串
f=datetime.strptime(s,'%Y%m%d') # 转为datetime
d=f.timestamp() # 得到时间戳
print(s)
print(d)
print(type(s))
print(type(d))

20231225
1703433600.0
<class 'str'>
<class 'float'>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带带琪宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值