首页生活资讯正文

Python时间格式操作总结

2024-09-17 次浏览


作者:Peter
起源:Python编程韶光

在生涯和事情中,我们每小我天天都在和光阴打交道:

Python时间格式操作总结
(图片来源网络,侵删)

早上什么时刻起床。

地铁几分钟来一趟。

正午什么时刻开端午休。

来日诰日是礼拜几。

间隔前次买衣服已经2个月呢。

引导让我给代码加上一个准时义务的功效,怎么办。

分歧的环境会遇到分歧的光阴问题:详细光阴点、光阴距离、礼拜等,无时不刻我们在和光阴碰撞。本文将应用Python对光阴相关的类,及其办法与属性等进行具体的讲授


1. 光阴戳 1.1光阴戳简介

在正式讲授光阴的相关函数之前,我们必需先一个观点:光阴戳。本文中特指unix光阴戳。

光阴戳Timestamp是指在一连串的数据中参加辨识笔墨,如光阴或者日期等,用以保障当地数据更新次序和长途的同等。

unix光阴戳是从1970年1月1日(UTC/GMT的午夜)开端所颠末的秒数,不斟酌闰秒。1970-01-01便是常常我们在MySQL中光阴为空的时刻,转化空的光阴戳之后获得的光阴。一个小时表现为UNIX光阴戳格局为:3600秒;一天表现为UNIX光阴戳为86400秒,闰秒不计算。详细的对比表如下:


1.2光阴戳转化网站

下面先容几个光阴戳和详细光阴之间互相转化的网站:

1、站长对象:https://tool.chinaz.com/tools/unixtime.aspx

2、在线对象:https://tool.lu/timestamp/

3、Json在线解析:https://www.sojson.com/unixtime.html

4、Unix光阴戳在线转换(菜鸟对象):https://c.runoob.com/front-end/852

5、北京光阴(光阴与光阴戳交换对象):http://www.beijing-time.org/shijianchuo/

先容完光阴戳的根本常识,下面重点讲授3个与光阴和日期相关的Python库:

calendar

time

datetime

2.calendar

calendar的中辞意思是"大众日历公众,以是它实在得当进行日期,尤其因此日历的情势展现。

2.1模块内容

下面举例阐明:

2.2calendar

我们显示即将曩昔2020年的日历,使用默认的参数:

import calendar
year = calendar.calendar(2020)
print(year)

转变参数再来显示一次:

year = calendar.calendar(2020,w=3,l=1,c=8)
print(year)

我们发现整个日历变宽了,并且礼拜的英文也是3个字母来显示的,解释一下3个参数的寄义:

c:每月距离间隔

w:逐日宽度距离

l:每礼拜行数

此中每行长度为:21*w+18+2*c,3个月一行

末了,看看即将到来的2021年日历:


2.3isleap(year)

该函数的作用是断定某个年份到底是不是闰年。假如是则返回True,不然返回的是False。

通俗年份可以或许被4整除,然则不克不及被100整除,称之为通俗闰年 年份是整百数的,必需可以或许被400整除,称之为世纪闰年
2.4leapdays(y1,y2)

断定两个年份之间有若干个闰年,包括y1,然则不包括y2,相似Python切片中的包括头部不包括尾部


2.5month(year,month,w=2,l=1)

该函数返回的是year年的month月的日历,只有两行题目,一周一行。逐日距离宽度为w个字符,每行的长度为7*w + 6,此中l是每礼拜的行数

起首看看默认后果;


接下来我们转变w和l两个参数:

1、转变w,我们发现礼拜的表现酿成了3个字母;同时天天之间的距离变宽了(左右距离)


2、转变参数l,我们发现每个礼拜之前的距离(上下)变宽了


2.6monthcalendar(year,month)

经由过程列表的情势返回year年month月的日历,列表中照样列表情势。每个子列表是一个礼拜。假如没有本月的日期则用0表现。每个子列表都是从礼拜1开端的,特色归纳综合如下:

每个子列表代表的是一个礼拜

从礼拜一到礼拜日,没有呈现在本月的日期用0取代

我们照样以2020年12月份为例:


和上面的日历进行对照,我们发现:呈现0的地位切实其实是没有呈现在12月份中

我们再看看2020年3月份的日历:


2.7monthrange(year,month)

该函数返回的成果是一个元组,元组中有两个数值(a,b)

数值a代表的是该月从礼拜几开端;划定6代表礼拜天,取值为0-6

数值b代表该月统共有若干天

经由过程一个例子来讲授,照样以2020年12月份为例:


成果中的1表现12月份从礼拜2开端(0-6,6代表礼拜日),该月统共31天

2.8weekday(y,m,d)

weekday办法是输入年代日,我们便可知道是日是礼拜几;返回值是0-6,0代表礼拜1,6代表礼拜天

经由过程一个例子来讲授,以12月12号为例:


双12是礼拜六,返回的成果是5,5代表的便是礼拜六,刚好吻合。

3.time

time模块是涉及到光阴功效中最常用的一个模块,在Python的相关光阴需求中常常会用到,下面详细讲授该模块的使用办法。

3.1模块内容

先看模块的整体使用


3.2time

time.time()是获取当前的光阴,加倍严厉地说,是获取当前光阴的光阴戳

再次懂得光阴戳:它因此1970年1月1日0时0份0秒为计时出发点,计算到当前的光阴长度(不斟酌闰秒)
3.3localtime

time.localtime打印当前的光阴,获得的成果是光阴元组,详细寄义:

条记:成果是光阴元组

time.localtime的参数默认是time.time()的光阴戳,可以本身输入某个光阴戳来获取其对应的光阴

默认当前光阴戳

指定某个光阴戳

3.4gmtime

localtime()获得的是当地光阴,假如必要国际化,使用gmtime(),最好是使用格林威治光阴。

格林威治尺度光阴:位于英国伦敦郊区的皇家格林威治天文台的尺度光阴,本初子午线颠末那边。


3.5asctime

time.asctime的参数为空时,默认是以time.localtime的值为参数,获得当前的日期、光阴、礼拜;另外,我们也可以本身设置参数,参数是光阴元组

使用当前光阴的默认光阴元组localtime

本身指定一个光阴元组

获取当前光阴的详细光阴和日期:


3.6ctime

ctime的参数默认是光阴戳;假如没有,也可以指定一个光阴戳


3.7mktime

mktime()也因此光阴元组为参数的,它返回的是光阴戳,相称于是localtime的逆向进程


3.8strftime

strftime()是依照我们指定的格局将光阴元组转化为字符串;假如不指准时间元组,默认是当前光阴localtime()。常用到的光阴格局见下表:


我们举例阐明:

字符串中的分隔符我们可以随意率性指定

可以同时显示年代日时分秒等

3.9strptime

strptime()是将字符串转化为光阴元组,我们必要分外注意的是,它有两个参数:

待转化的字符串

光阴字符串对应的格局,格局便是上面表中提到的

4.datetime

固然time模块已经可以或许办理许多的问题,然则现实事情和营业需求中必要更多的对象,让我们使用起来更便利和快捷,datetime就是此中一个很好用的模块。datetime模块中几个常用的类如下:

date:日期类,常用属性:year/month/day

time:光阴类,常用属性:hour/minute/second/microsecond

datetime:日期光阴类

timedelta:光阴距离,即两个光阴点之间的光阴长度

tzinfo:时区类

4.1模块内容


4.2date

起首我们引入date类,并创立一个日期工具:


1、然后我们可以操作这个日期工具的各类属性:后面加上()

print("大众当前日期:公众,today) # 当前日期
print("大众当前日期(字符串):"大众,today.ctime()) # 返回日期的字符串
print("大众光阴元组信息:"大众,today.timetuple()) # 当前日期的光阴元组信息
print("大众年:"大众,today.year) # 返回today工具的年份
print(公众月:"大众,today.month) # 返回today工具的月份
print("大众日:"大众,today.day) # 返回today工具的日
print("大众礼拜:公众,today.weekday()) # 0代表礼拜一,类推
print("大众公历序数:公众,today.toordinal()) # 返回公历日期的序数
print("大众年/周数/礼拜:公众,today.isocalendar()) # 返回一个元组:一年中的第几周,礼拜几

# 成果显示
当前日期: 2020-12-25
当前日期(字符串):Fri Dec 25 00:00:00 2020
光阴元组信息:time.struct_time(tm_year=2020, tm_mon=12, tm_mday=25, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=360, tm_isdst=-1)
年: 2020
月: 12
日: 25
礼拜: 4
公历序数: 737784
年/周数/礼拜: (2020, 52, 5)

2、date类中光阴和光阴戳的转换:


详细光阴的光阴戳转成日期:


3、格局化光阴相关,格局参照time模块中的strftime办法

from datetime import datetime, date, time
today = date.today()

print(today)
# 2020-12-26 默认衔接符号是-

print(today.strftime(公众%Y/%m/%d"大众)) # 指定衔接符
# 2020/12/26

print(today.strftime("大众%Y:%m:%d公众))
# 2020:12:26

print(today.strftime(公众%Y/%m/%d %H:%M:%S"大众)) # 转化为详细的光阴
# 2020/12/26 00:00:00

4、改动日期使用replace办法


4.3time

time类也是要天生time工具,包括hour、minute、second、microsecond,我们照样经由过程例子来进修:

from datetime import time

t = time(10,20,30,40)
print(t.hour) # 时分秒
print(t.minute)
print(t.second)
print(t.microsecond) # 微秒

# 成果
10
20
30
40
4.4datetime

datetime类包括date类和time类的全体信息,下面是类办法相关的:

from datetime import datetime

print(datetime.today())
print(datetime.now())
print(datetime.utcnow())# 返回当前UTC日期和光阴的datetime工具
print(datetime.fromtimestamp(1697302830)) # 光阴戳的datetime工具
print(datetime.fromordinal(699000) )
print(datetime.combine(date(2020,12,25), time(11,22,54))) # 拼接日期和光阴
print(datetime.strptime(公众2020-12-25公众,"大众%Y-%m-%d"大众))

# 成果
2020-12-25 23:24:42.481845
2020-12-25 23:24:42.482056
2020-12-25 15:24:42.482140
2023-10-15 01:00:30
1914-10-19 00:00:00
2020-12-25 11:22:54
2020-12-25 00:00:00

再看看相关工具和属性相关:

from datetime import datetime

d = datetime(2020,12,25,11,24,23)

print(d.date())
print(d.time())
print(d.timetz()) # 从datetime中拆分出详细时区属性的time
print(d.replace(year=2021,month=1)) # 替换
print(d.timetuple()) # 光阴元组
print(d.toordinal()) # 和date.toordinal一样
print(d.weekday())
print(d.isoweekday())
print(d.isocalendar())
print(d.isoformat())
print(d.strftime(公众%Y-%m-%d :%H:%M:%S"大众))

# 成果
2020-12-25
11:24:23
11:24:23
2021-01-25 11:24:23
time.struct_time(tm_year=2020, tm_mon=12, tm_mday=25, tm_hour=11, tm_min=24, tm_sec=23, tm_wday=4, tm_yday=360, tm_isdst=-1)
737784
4
5
(2020, 52, 5)
2020-12-25T11:24:23
2020-12-25 :11:24:23
4.5timedelta

timedelta工具表现的是一个光阴段,即两个日期date或者日期光阴datetime之间的差;支撑参数:weeks、days、hours、minutes、seconds、milliseconds、microseconds



4.6tzinfo

当地光阴指的是我们体系自己设准时区的光阴,例如中国处于北京光阴,常说的东八区UTC+8:00datetime类有一个时区属性tzinfo

tzinfo是一个关于时区信息的类,是一个抽象的基类,不克不及直接被实例化来使用。它的默认值是None,无法区分详细是哪个时区,必要我们强制指定一个之后能力使用。


由于自己体系的时区刚好在中国处于东八区,以是上述代码是可以或许正常运行的,成果也是OK的。那假如我们想切换到其他时区的光阴,该若何操作呢。这个时刻我们必要进行时区的切换。

1、我们先经由过程utcnow()获取到当前的UTC光阴

utc_now = datetime.utcnow().replace(tzinfo=timezone.utc) # 指定utc时区
print(utc_now)

# 成果
2020-12-26 01:36:33.975427+00:00

2、经由过程astimezone()将时区指定为我们想转换的时区,好比东八区(北京光阴):

# 经由过程astimezone切换到东八区

beijing = utc_now.astimezone(timezone(timedelta(hours=8)))
print(beijing)

# 成果
2020-12-26 09:36:33.975427+08:00

用同样的办法切到东九区,东京光阴:

# UTC时区切换到东九区:东京光阴

tokyo = utc_now.astimezone(timezone(timedelta(hours=9)))
print(tokyo)

# 成果
2020-12-26 10:36:33.975427+09:00

还可以直接从北京光阴切换到东京光阴

# 北京光阴(东八区)直接切换到东京光阴(东九区)

tokyo_new = beijing.astimezone(timezone(timedelta(hours=9)))
print(tokyo_new)

# 成果
2020-12-26 10:36:33.975427+09:00

5.常用光阴转化

下面先容几个事情顶用到的光阴转化小技能:

光阴戳转日期

日期转光阴戳

格局化光阴

指定格局获取当前光阴

5.1光阴戳转成日期

光阴戳转成详细光阴,我们必要两个函数:

time.localtime:将光阴戳转成光阴元组情势

time.strftime:将光阴元组数据转成我们必要的情势

import time
now_timestamp = time.time() # 获取当前光阴的光阴戳

# 光阴戳先转成光阴元组,strftime在转成指定格局
now_tuple = time.localtime(now_timestamp)
time.strftime("大众%Y/%m/%d %H:%M:%S公众, now_tuple)

# 成果
'2020/12/26 11:19:01'

假设我们指定一个详细的光阴戳来进行转换:

import time
timestamp = 1608852741 # 指准时间戳

a = time.localtime(timestamp) # 得到光阴元组情势数据
print("大众光阴元组数据:公众,a)
time.strftime(公众%Y/%m/%d %H:%M:%S公众, a) # 格局化

# 成果
光阴元组数据:time.struct_time(tm_year=2020, tm_mon=12, tm_mday=25, tm_hour=7, tm_min=32, tm_sec=21, tm_wday=4, tm_yday=360, tm_isdst=0)
'2020/12/25 07:32:21'

假如我们不想指定详细的格局,只想获取光阴戳对应的光阴,直接经由过程time.ctime即可:

import time
time.ctime(1608852741)

# 成果
'Fri Dec 25 07:32:21 2020'
5.2日期光阴转成光阴戳

日期光阴转成光阴戳格局,我们必要使用两个办法:

strptime():将光阴转换成光阴数组

mktime():将光阴数组转换成光阴戳

经由过程详细的案例来进修一下:

date = 公众2020-12-26 11:45:34"大众

# 1、光阴字符串转成光阴数组情势
date_array = time.strptime(date, "大众%Y-%m-%d %H:%M:%S"大众)

# 2、查看光阴数组数据
print("大众光阴数组:"大众, date_array)

# 3、mktime光阴数组转成光阴戳
time.mktime(date_array)

# 成果
光阴数组:time.struct_time(tm_year=2020, tm_mon=12, tm_mday=26, tm_hour=11, tm_min=45, tm_sec=34, tm_wday=5, tm_yday=361, tm_isdst=-1)
1608954334.0

5.3格局化光阴

事情需求中有时刻给定的光阴格局未必是我们可以或许直接使用,以是可能必要进行格局的转换,必要使用两个办法:

strptime():将光阴转换成光阴数组

strftime():从新格局化光阴

经由过程案例来进行进修:

import time

old = "大众2020-12-12 12:28:45"大众

# 1、转换成光阴数组
time_array = time.strptime(old, "大众%Y-%m-%d %H:%M:%S"大众)

# 2、转换成新的光阴格局(20201212-20:28:54)
new = time.strftime(公众%Y%m%d-%H:%M:%S"大众,time_array) # 指定显示格局

print("大众原格局光阴:"大众,old)
print(公众新格局光阴:"大众,new)

# 成果
原格局光阴: 2020-12-12 12:28:45
新格局光阴: 20201212-12:28:45

5.4指定格局获取当前光阴

为了可以或许获取到指定格局确当前光阴,我们分为3个步调:

time.time():获取当前光阴

time.localtime():转成光阴元组

time.strftime():从新格局化光阴

经由过程一个案例来进修:

# 1、光阴戳
old_time = time.time()
# 2、光阴元组
time_array = time.localtime(old_time)
# 3、指定格局输出
new_time = time.strftime("大众%Y/%m/%d %H:%M:%S"大众, time_array)
print(new_time)

# 成果
2020/12/26 11:56:08
6.总结

本文经由过程各类案例具体先容了Python中关于光阴输出和转化的3个模块:calendar、time、datetime,末了总结了4个事情中常用的光阴转化技能,愿望对年夜家掌握Python中的光阴输出和转化有所赞助,不再被光阴困扰。

Python猫技术交流群开放啦。群里既有海内一二线年夜厂在人员工,也有海内外高校在读学生,既有十多年码龄的编程老鸟,也有中小学方才入门的新人,进修气氛优越。想入群的同窗,请在公号内回复『交流群』,获取猫哥的微信 (谢绝告白党,非诚勿扰。)~

光阴大众time
广东川田卫生用品有限公司将会参展第32届生活用纸国际科技展览会 物料需求计划基本结构包括哪些
相关内容