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)


目录
相关文章
|
9天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
24 5
|
19天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
22天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
68 5
|
26天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
19 7
|
26天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
17 6
|
23天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
18 1
|
24天前
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
54 1
|
25天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
14 1
|
25天前
|
Python
SciPy 教程 之 SciPy 模块列表 8
SciPy教程之常量模块单位类型介绍。该模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例展示了部分长度单位的转换值,例如英寸、英尺、海里等。
16 1
|
27天前
|
知识图谱 Python
SciPy 教程 之 SciPy 模块列表 5
本教程介绍SciPy常量模块中的单位类型,涵盖公制、质量、时间、长度等单位。示例代码展示了如何使用`scipy.constants`模块获取不同质量单位的千克值,如公吨、磅、盎司、原子质量单位等。
15 1