python datetime模块

简介: python datetime模块

引入模块

import datetime

datetime模块提供了五个常用类:date、time、datetime、timedelta、tzinfo,接下来我们对这五个常用类进行说明。


date类

date类包含三个参数,分别为year,month,day,返回格式为year-month-day。

date对象表示理想化日历中的日期(年、月和日), 公历1年1月1日被称为第一天,依次往后推。

其中用户创建时间的类方法如下:

import datetime
print("今天的日期是:",datetime.date.today())     # 今日的日期
print("使用时间戳创建的日期:",datetime.date.fromtimestamp(1234567896))   #  使用时间戳创建日期
print("使用公历序数创建的日期:",datetime.date.fromordinal(1))    # 使用公历序数创建的日期
返回内容:
今天的日期是: 2023-03-12
使用时间戳创建的日期: 2009-02-14
使用公历序数创建的日期: 0001-01-01

对象的属性及方法如下:

import datetime
today = datetime.date(year=2023,month=3,day=12)   #  使用参数创建日期
print('date对象的年份:', today.year)
print('date对象的月份:', today.month)
print('date对象的日:', today.day)
print("date对象的struct_time结构为:",today.timetuple())
print("返回当前公历日期的序数:",today.toordinal())   #  与fromordinal函数作用相反
print("当前日期为星期(其中:周一对应0):{}".format(today.weekday()))
print("当前日期为星期(其中:周一对应1):{}".format(today.isoweekday()))
print("当前日期的年份、第几周、周几(其中返回为元组):",today.isocalendar())
print("以ISO 8601格式‘YYYY-MM-DD’返回date的字符串形式:",today.isoformat())
print("返回一个表示日期的字符串(其格式如:Sun Mar 12 00:00:00 2023):",today.ctime())
print("指定格式为:",today.strftime("%Y/%m/%d"))
print("替换后的日期为:",today.replace(2021,4,26))
返回内容:
date对象的年份: 2023
date对象的月份: 3
date对象的日: 12
date对象的struct_time结构为: time.struct_time(tm_year=2023, tm_mon=3, tm_mday=12, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=71, tm_isdst=-1)
返回当前公历日期的序数: 738591
当前日期为星期(其中:周一对应0):6
当前日期为星期(其中:周一对应1):7
当前日期的年份、第几周、周几(其中返回为元组): (2023, 10, 7)
以ISO 8601格式‘YYYY-MM-DD’返回date的字符串形式: 2023-03-12
返回一个表示日期的字符串(其格式如:Mon Aug 31 00:00:00 2020): Sun Mar 12 00:00:00 2023
指定格式为: 2023/03/12 

格式化表达式:

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%f 微秒 (000001-999999)
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身 

time类

time类包含六个参数,分别为hour,minute,second,microsecond,tzinfo,fold,返回格式为hour:minute:second(.microsecond)。常用的参数有:hour、minute、second三个。

其对象的属性和方法如下:  

import datetime
create_time = datetime.time(hour=11,minute=18,second=31)   #  使用参数创建日期
print('create_time对象的小时为:', create_time.hour)
print('create_time对象的分钟为:', create_time.minute)
print('create_time对象的秒数为:', create_time.second) 
print("返回create_time的字符串形式:",create_time.isoformat())
print("指定格式为:",create_time.strftime("%H/%M/%S"))
print("替换后的时间为:",create_time.replace(20,9,29))
内容如下:
create_time对象的小时为: 11
create_time对象的分钟为: 18
create_time对象的秒数为: 31
返回create_time的字符串形式: 11:18:31
指定格式为: 11/18/31
替换后的时间为: 20:09:29 

datetime类

datetime类可以看作date和time类的合体,其包含了这两个类中的全部参数,其中创建datetime类的类方法如下:

import datetime
print("现在的时间是:",datetime.datetime.today())
print("返回现在的时间是:",datetime.datetime.now())
print("当前UTC日期和时间是:",datetime.datetime.utcnow())
print("对应时间戳的日期和时间是:",datetime.datetime.fromtimestamp(1234567896))
print("对应UTC时间戳的日期和时间是:",datetime.datetime.utcfromtimestamp(1234567896))
print("公历序列对应的日期和时间是:",datetime.datetime.fromordinal(1))
print("日期和时间的合体为:",datetime.datetime.combine(datetime.date(2023, 3, 12), datetime.time(21, 12, 12)))
返回内容:
现在的时间是: 2023-03-12 21:41:56.971984
返回现在的时间是: 2023-03-12 21:41:56.971983
当前UTC日期和时间是: 2023-03-12 13:41:56.971983
对应时间戳的日期和时间是: 2009-02-14 07:31:36
对应UTC时间戳的日期和时间是: 2009-02-13 23:31:36
公历序列对应的日期和时间是: 0001-01-01 00:00:00
日期和时间的合体为: 2023-03-12 21:12:12 

对象的属性和方法如下:

import datetime
now = datetime.datetime(2023,3,12,21,44,10)
print("年为:",now.year)
print("月为:",now.month)
print("日为:",now.day)
print("小时为:",now.hour)
print("分钟为:",now.minute)
print("秒数为:",now.second)
print('当前日期为:', now.date() )
print('当前时间:', now.time() )
print("返回struct_time为",now.timetuple())   #  和date一样
print("返回UTC的struct_time为",now.utctimetuple())
print("返回的公历序列数为:",now.toordinal())   #  和date一样
print("返回标准日期格式为:",now.isoformat())   #  和date一样
print("返回的周几(1表示周一):",now.isoweekday())    #  和date一样
print("返回的周几(0表示周一):",now.weekday())    #  和date一样
print("now.isocalendar():", now.isocalendar())  #  和date一样
print("now.ctime():",now.ctime())   #  和date一样
print("格式化时间为:",now.strftime('%Y/%m/%d %H:%M:%S'))   #  把日期按照format指定的格式进行格式化
print(datetime.datetime.strptime("2023/3/12 21:44:00",'%Y/%m/%d %H:%M:%S'))     #   将字符串格式转换为日期格式
返回内容:
年为: 2023
月为: 3
日为: 12
小时为: 21
分钟为: 44
秒数为: 10
当前日期为: 2023-03-12
当前时间: 21:44:10
返回struct_time为 time.struct_time(tm_year=2023, tm_mon=3, tm_mday=12, tm_hour=21, tm_min=44, tm_sec=10, tm_wday=6, tm_yday=71, tm_isdst=-1)
返回UTC的struct_time为 time.struct_time(tm_year=2023, tm_mon=3, tm_mday=12, tm_hour=21, tm_min=44, tm_sec=10, tm_wday=6, tm_yday=71, tm_isdst=0)
返回的公历序列数为: 738591
返回标准日期格式为: 2023-03-12T21:44:10
返回的周几(1表示周一): 7
返回的周几(0表示周一): 6
now.isocalendar(): (2023, 10, 7)
now.ctime(): Sun Mar 12 21:44:10 2023
格式化时间为: 2023/03/12 21:44:10
2023-03-12 21:44:00

timedelta类

timedelta类代表两个datetime对象之间的时间差,即两个日期或者日期时间之差。支持参数:weeks、days、hours、minutes、seconds、milliseconds、microseconds。但是据官方文档说其内部只存储days、seconds 和 microseconds,其他单位会做对应的时间转换。

import datetime
now = datetime.date.today()
before_5_date = now + datetime.timedelta(days=-5)
print("now date is:",now)   # 表示现在的日期
print("before five days date is:",before_5_date)   # 表示五天前的日期
now_time = datetime.datetime.now()
print(now_time)
after_5_hours_10_minutes = now_time + datetime.timedelta(hours=5,minutes=10)
print(after_5_hours_10_minutes)
返回内容:
now date is: 2023-03-12
before five days date is: 2023-03-07
2023-03-12 21:48:32.697045
2023-03-13 02:58:32.697045

tzinfo类

tzinfo类是一个虚拟基类,代表时区(time zone),创建子类时必须重写name(),utcoffset(),dst()这三个方法,tzinfo类在日常工作中用的比极少。

import datetime
#tzinfo查看utc_time属性
utc_time = datetime.datetime.utcnow()
print(utc_time)
print(utc_time.tzinfo)
2023-03-12 14:19:27.963555
None 


时间转换

time.localtime() 本地当前时间

time.time 1970到现在的时间

time实现当前时间转换为时间戳

strptime要求传入的t为string类型,可以用到str()方法进行转换,mktime要求处理tuple类型  

方式一
import time
t = '2023-3-12 00:00:00'
s_t = time.strptime(t, "%Y-%m-%d %H:%M:%S")  # 返回元祖
print(type(s_t))
print(s_t)
mkt = int(time.mktime(s_t))
print(mkt)  
<class 'time.struct_time'>
time.struct_time(tm_year=2023, tm_mon=3, tm_mday=12, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=71, tm_isdst=-1)
1678550400
方式二
import datetime
import time
d_time = datetime.datetime.now()
un_time = time.mktime(d_time.timetuple())
print(un_time)
将unix时间戳转换为“当前时间”格式
times = datetime.datetime.fromtimestamp(un_time)
print(times)
1678629533.0
2023-03-12 21:58:53

string和datetime互转

string to datetime

import datetime
str = '2023-3-12'
date_time = datetime.datetime.strptime(str,'%Y-%m-%d')
print(type(date_time))
<class 'datetime.datetime'>

datetime to string

import datetime
# # 获得当前时间
now_date = datetime.datetime.now()
print(type(now_date))
str_date = now_date.strftime("%Y-%m-%dT%H:%M:%S.%f")
print(type(str_date))
<class 'datetime.datetime'>
<class 'str'>  

timezone和timedelta时区

from datetime import timezone, timedelta
beijing = timezone(timedelta(hours=8))
print(f'1、北京时区为:{beijing}')
Tokyo = timezone(timedelta(hours=9))
print(f'2、东京时区为:{Tokyo}')
New_York = timezone(timedelta(hours=-4))
print(f'3、纽约时区为:{New_York}')
utc = timezone.utc
print(f'4、世界标准时区为:{utc}')
北京时区为:UTC+08:00
东京时区为:UTC+09:00
纽约时区为:UTC-04:00
世界标准时区为:UTC

获取当前时间简单介绍

方法一
now_date获取当前本机时间,format为2023-03-12 21:14:20.328375,type为datetime.datetime,本机是北京时间,东八区,世界标准时间相差八小时,需要用到timedelta对datetime.datetime进行加减计算,strftime将datetime.datetime类型转换为指定的string类型,根据需求进行切割和拼接。
方法二
datetime.datetime.now()后,astimezone(datetime.timezone.utc)输出世界标准时间
方法三
datetime.datetime.utcnow() 直接输出世界标准时间  

demo

根据当前时间获取世界标准时间,并输出为下面格式:2023-03-12T13:11:10.702Z  

方法一:

import datetime
# # 获得当前时间
now_date = datetime.datetime.now()
datetime_date = now_date-datetime.timedelta(hours=8)
str_date = datetime_date.strftime("%Y-%m-%dT%H:%M:%S.%f")
three_ms = str_date[:-3]+"Z"
print(three_ms)

方法二:

import datetime
now = datetime.datetime.now()
utc_time = now.astimezone(datetime.timezone.utc)
utc_time_str = utc_time.strftime('%Y-%m-%dT%H:%M:%S.%f')
utc_time_str_1 = utc_time_str[:-3]+"Z"
print(utc_time_str_1)  

方法三

import datetime
now = datetime.datetime.utcnow()
utc_time_str_2 = now.strftime('%Y-%m-%dT%H:%M:%S.%f')
utc_time_str_3 = utc_time_str_2[:-3]+"Z"
print(utc_time_str_3)


目录
相关文章
|
1月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
47 4
|
10天前
|
Python
Python Internet 模块
Python Internet 模块。
104 74
|
28天前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
105 63
|
1月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
1月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
1月前
|
JSON Linux 数据格式
Python模块:从入门到精通,只需一篇文章!
Python中的模块是将相关代码组织在一起的单元,便于重用和维护。模块可以是Python文件或C/C++扩展,Python标准库中包含大量模块,如os、sys、time等,用于执行各种任务。定义模块只需创建.py文件并编写代码,导入模块使用import语句。此外,Python还支持自定义模块和包,以及虚拟环境来管理项目依赖。
Python模块:从入门到精通,只需一篇文章!
|
1月前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
40 5
|
1月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
1月前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
53 5
|
1月前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块