目录
简介
一、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'>