一站式掌握python各种时间格式的处理

科技一点鑫得 2024-03-18 05:01:16

日常经常会遇到包含各种各样时间格式的信息,有时需要解析这些时间信息存储入库,有时需要将其转换成另一种要求的时间格式。下面是一些常见的时间格式示例,其中包含年份的不同表示形式、月份的数值和缩写名称表示、星期、上午和下午、时区等。python内置的datetime模块可以轻松处理这样的任务,接下来我们就以列出的这些时间格式为例逐个介绍如何做,最后将给出全面的时间格式解读,让你一站式掌握所有时间格式的处理方法。

2024-02-23 13:49:5414-09-09 04:58:0903/15/2024 13:15:002024-03-09 12:39:02.072Dec 2 2023 00:52:09Apr 6, 2021, 3:35 AM UTCMon Dec 20 2021 17:06:11 GMT+0800导入datetime模块

datetime是python内置的时间处理模块,不需要安装,本文大部分示例只会用到datetime模块中的datetime类,涉及时区时会用到timedelta和timezone,可以一次性导入,后面具体涉及到时也会再次给出导入的语句

from datetime import datetime, timedelta, timezonestrftime和strptime

处理时间信息要么是把时间格式字符串解析为时间对象,要么从时间对象生成想要的时间字符串datetime.strftime(format)是datetime实例方法,该方法接受一个时间格式字符串,返回format指定格式的字符串,以上面的第一个时间格式为例

# 生成datetime对象t = datetime(2024, 2, 23, 13, 49, 54)# %Y-年 %m-月 %d-日 %H-时 %M-分 %S-秒t.strftime('%Y-%m-%d %H:%M:%S')# 返回时间字符串:2024-02-23 13:49:54

datetime.strptime(time_str, format)为datetime的类方法,该方法接受一个时间字符串和对应的时间格式,匹配则返回对应的时间对象,同样以上面的第一个时间格式为例,时间串和format不匹配会抛出错误

t = datetime.strptime('2024-02-23 13:49:54', '%Y-%m-%d %H:%M:%S')# 返回时间对象:datetime.datetime(2024, 2, 23, 13, 49, 54)时间串的解析与生成

理解了strftime和strptime方法的使用之后,接下来逐个展示如何将上面给出的时间串示例解析成时间对象,以及如何将时间对象输出为对应格式的时间字符串

# 2024-02-23 13:49:54 %Y-不带世纪的年份t = datetime.strptime('2024-02-23 13:49:54', '%Y-%m-%d %H:%M:%S')t.strftime('%Y-%m-%d %H:%M:%S')# 14-09-09 04:58:09 %y-不带世纪的年份t = datetime.strptime('14-09-09 04:58:09', '%y-%m-%d %H:%M:%S')t.strftime('%y-%m-%d %H:%M:%S')# 03/15/2024 13:15:00t = datetime.strptime('03/15/2024 13:15:00', '%m/%d/%Y %H:%M:%S')t.strftime('%m/%d/%Y %H:%M:%S')# 2024-03-09 12:39:02.072 072-表示毫秒 %f-表示微妙t = datetime.strptime('2024-03-09 12:39:02.072', '%Y-%m-%d %H:%M:%S.%f')# 最后一段为微秒 2024-03-09 12:39:02.072000 t.strftime('%Y-%m-%d %H:%M:%S.%f')# 去掉后面3位后表示毫秒 2024-03-09 12:39:02.072t.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] # Dec 2 2023 00:52:09 %b-表示月份的名称缩写 %d-表示日,会补零到两位数t = datetime.strptime('Dec 2 2023 00:52:09', '%b %d %Y %H:%M:%S')# %#d-表示日,不补零t.strftime('%b %#d %Y %H:%M:%S')# Apr 6, 2021, 3:35 AM UTC %p-表示上午/下午# strptime并不支持从format提取时区信息,因此UTC可以当作普通的字符串填入t = datetime.strptime('Apr 6, 2021, 3:35 AM UTC', '%b %d, %Y, %H:%M %p UTC')# 携带时区信息的时间对象输出为字符串时可以使用%Z显示时区from datetime import timezonet = datetime(2021, 4, 6, 3, 35, 0, tzinfo=timezone.utc)# %#H-表示小时,不补零t.strftime('%b %#d, %Y, %#H:%M %p %Z')# Mon Dec 20 2021 17:06:11 GMT+0800 %a-表示星期的名称缩写 GMT+0800表示中国标准时间# 同样strptime无法提取时区信息,GMT+0800作为普通字符串t = datetime.strptime('Mon Dec 20 2021 17:06:11 GMT+0800', '%a %b %d %Y %H:%M:%S GMT+0800')# 中国时区比UTC时间快8小时from datetime import timedelta, timezonet = datetime(2021, 12, 20, 17, 6, 11, tzinfo=timezone(timedelta(hours=8)))# GMT表示为格林威治时间,和UTC认为是等效的,%Z输出的基本是UTC,因此要输出GMT需要直接指定,%z-输出utc偏移量t.strftime('%a %b %d %Y %H:%M:%S GMT%z')时间格式汇总

熟悉了上面的几个典型的例子之后,我们发现只要知道了时间格式对应的指令就可以轻松地解析各种各样的时间串,随心所欲地生成自己所需要的时间字符串了。最后,下表给出所有的时间格式指令、含义以及具体的示例供参考。

指令

意义

举例

%a

工作日作为区域设置的缩写名称。

周日、周一、…、周六 (en_US);所以,Mo,…,Sa (de_DE)

%A

工作日作为区域设置的全名。

周日、周一、……、周六 (en_US);桑塔格、蒙塔格、……、萨姆斯塔格 (de_DE)

%w

十进制数形式的工作日,其中 0 表示星期日,6 表示星期六。

0, 1, …, 6

%d

以零填充的十进制数表示的月份中的某一天。

01, 02, …, 31

%b

月份作为区域设置的缩写名称。

一月、二月、...、十二月 (en_US);一月、二月……、Dez (de_DE)

%B

月份作为区域设置的全名。

一月、二月、……、十二月 (en_US);一月、二月、...、十二月 (de_DE)

%m

以零填充的十进制数表示的月份。

01, 02, …, 12

%y

不带世纪的年份作为补零十进制数。

00, 01, …, 99

%Y

以十进制数表示的年份和世纪。

0001, 0002, …, 2013, 2014, …, 9998, 9999

%H

小时(24 小时制),以零填充的十进制数。

00, 01, …, 23

%I

小时(12 小时制),以零填充的十进制数。

01, 02, …, 12

%p

Locale 相当于 AM 或 PM。

上午、下午(en_US);上午、下午 (de_DE)

%M

分钟作为补零十进制数。

00, 01, …, 59

%S

第二个是补零的十进制数。

00, 01, …, 59

%f

微秒为十进制数,用零填充至 6 位数字。

000000, 000001, …, 999999

%z

表单中的 UTC 偏移量 ±HHMM[SS[.ffffff]](如果对象是幼稚的,则为空字符串)。

(空)、+0000、-0400、+1030、+063415、-030712.345216

%Z

时区名称(如果对象是幼稚的,则为空字符串)。

(空),UTC,GMT

%j

一年中的第几天,以零填充的十进制数表示。

001, 002, …, 366

%U

一年中的周数(星期日为一周的第一天),采用补零的十进制数。新年第一个星期日之前的所有日子都被视为第 0 周。

00, 01, …, 53

%W

一年中的周数(星期一为一周的第一天),以零填充的十进制数表示。新年第一个星期一之前的所有日子都被视为第 0 周。

00, 01, …, 53

%c

区域设置的适当日期和时间表示。

1988 年 8 月 16 日星期二 21:30:00 (en_US);1988 年 8 月 16 日 21:30:00 (de_DE)

%x

区域设置的适当日期表示。

88 年 8 月 16 日(无);1988 年 8 月 16 日(en_US);1988 年 8 月 16 日 (de_DE)

%X

区域设置的适当时间表示。

21:30:00(en_US);21:30:00 (de_DE)

%%

一个文字'%'字符。

%

参考文献

[1].https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

0 阅读:14

科技一点鑫得

简介:感谢大家的关注