Python 中如何格式化日期
介绍
Python 内置了多种实用的对象供开发者直接使用,日期对象(Date Object)便是其中之一。由于日期和时间的复杂性,从头实现日期处理逻辑往往十分困难。所幸,Python 的日期对象将日期转换为所需字符串格式的过程变得相当简单。
日期格式化是程序员的重要任务之一。不同地区表示日期和时间的方法各不相同,因此,以用户可读的方式显示日期值是开发中的常见目标。
例如,你可能需要用数字格式表示日期,如 02-23-2018;另一方面,你可能需要以更长的文本格式表示相同的日期,如 Feb 23, 2018。在某些情况下,你可能还希望从数字格式的日期值中提取出字符串格式的月份。
在本文中,我们将研究不同类型的日期对象及其功能。
datetime 模块
正如你所猜到的,Python 的 datetime 模块包含可用于处理日期和时间值的方法。要使用这个模块,我们需要先通过以下 import 语句将其导入:
import datetime我们可以使用 time 类表示时间值。时间类的属性包括小时、分钟、秒和微秒。
time 类的参数是可选的。尽管不指定任何参数你将获得零点时间对象,但这大多数时候不太可能是你需要的。
例如,要初始化值为 1 小时、10 分钟、20 秒、13 微秒的时间对象,我们可以运行以下命令:
t = datetime.time(1, 10, 20,13)让我们使用 print 函数来查看时间:
print(t)输出:
01:10:20.000013你可能只需要查看小时、分钟、秒或者微秒,可以像下面这么做:
print('hour:', t.hour)输出:
hour: 1可以按照如下方式检索上述时间对象的分钟、秒或者微秒:
print('Minutes:', t.minute)
print('Seconds:', t.second)
print('Microsecond:', t.microsecond)输出:
Minutes: 10
Seconds: 20
Microsecond: 13日历日期可以通过 date 类表示。示例具有的属性有年、月和日。
让我们来调用 today 方法来查看今天的日期:
import datetime
today = datetime.date.today()
print(today)输出:
2018-09-15代码将返回今天的日期,因此你看到的输出取决于你运行脚本的日期。
现在我们调用 ctime 方法以另一种格式打印日期:
print('ctime:', today.ctime())输出:
ctime: Sat Sep 15 00:00:00 2018ctime 方法会使用比我们之前看到的示例更长的日期时间格式。此方法主要用于将 Unix 时间(从 1970 年 1 月 1 日以来的秒数)转换为字符串格式。
以下是我们如何使用 date 类显示年份、月份和日期:
print('Year:', today.year)
print('Month:', today.month)
print('Day :', today.day)输出:
Year: 2018
Month: 9
Day : 15使用 strftime 将日期转换为字符串
既然你已经知道如何创建时间和日期对象,那么让我们学习如何将它们格式化为更易读的字符串。
为此,我们将使用 strftime 方法。这个方法可以帮助我们将日期对象转换为可读字符串。它通常在日期对象上直接调用,语法如下所示:
object.strftime(format)参数 format 是格式字符串,用于指定以何种格式显示时间日期。
这个方法也可以在 datetime 对象上直接调用。如以下示例所示:
import datetime
x = datetime.datetime(2018, 9, 15)
print(x.strftime("%b %d %Y %H:%M:%S"))输出:
Sep 15 2018 00:00:00我们使用以下字符串来格式化日期:
%b: 返回月份名称的前三个字符。在我们的例子中,它返回 "Sep"。%d: 返回本月的日期,从 1 到 31。在我们的例子中,它返回 "15"。%Y: 返回四位数格式的年份。在我们的例子中,它返回 "2018"。%H: 返回小时。在我们的例子中,它返回 "00"。%M: 返回分钟,从 00 到 59。在我们的例子中,它返回 "00"。%S: 返回秒,从 00 到 59。在我们的例子中,它返回 "00"。
我们没有时间对象,因此时间值都是 "00"。下面的例子显示了如何格式化时间:
import datetime
x = datetime.datetime(2018, 9, 15, 12, 45, 35)
print(x.strftime("%b %d %Y %H:%M:%S"))输出:
Sep 15 2018 12:45:35常用格式化代码
除了上面给出的字符串外,strftime 方法还使用了其他几个指令来格式化日期值:
| 代码 | 含义 | 示例 |
|---|---|---|
%a | 返回工作日的前三个字符 | Wed |
%A | 返回工作日的全名 | Wednesday |
%B | 返回月份的全名 | September |
%w | 返回工作日作为数字,从 0 到 6,周日为 0 | 0-6 |
%m | 将月份作为数字返回,从 01 到 12 | 01-12 |
%p | 返回 AM/PM 标识 | AM/PM |
%y | 返回两位数格式的年份 | 18 |
%Y | 返回四位数格式的年份 | 2018 |
%f | 返回从 000000 到 999999 的微秒 | 000000-999999 |
%Z | 返回时区 | UTC/CST |
%z | 返回 UTC 偏移量 | +0800 |
%j | 返回当年的日期编号,从 001 到 366 | 001-366 |
%W | 返回年份的周数,从 00 到 53。星期一被记为一周第一天 | 00-53 |
%U | 返回年份的周数,从 00 到 53。星期日被记为一周第一天 | 00-53 |
%c | 返回本地日期和时间版本 | - |
%x | 返回本地日期版本 | - |
%X | 返回本地时间版本 | - |
注意:关于工作日的翻译。原文中的 "weekday" 在某些语境下可能被翻译为“工作日”,但在 Pythondatetime中,它指代一周中的某一天(周一至周日)。例如%A可能返回 'Sunday'。
请考虑以下示例:
import datetime
x = datetime.datetime(2018, 9, 15)
print(x.strftime('%b/%d/%Y'))输出:
Sep/15/2018以下是你只获取月份的方法:
print(x.strftime('%B'))输出:
September让我们只展示年份:
print(x.strftime('%Y'))输出:
2018在这个例子中,我们使用了格式化代码 %Y。请注意,它的 Y 是大写的,现在使用小写写:
print(x.strftime('%y'))输出:
18 这次省略了年份中前两位数字。如你所见,使用这些格式化代码,你可以用想要的任何方式表示日期时间。
使用 strptime 将字符串转换成日期
strftime 方法帮助我们将日期对象转换为可读的字符串,strptime 恰恰相反。它作用于字符串,并将它们转换成 Python 可以理解的日期对象。
这是这个方法的语法:
datetime.strptime(string, format)string 参数是我们转换成日期格式的字符串值。format 参数是指定转换后日期采用的格式的指令。
例如,如果我们需要将字符串 9/15/18 转换成 datetime 对象。
我们先导入 datetime 模块,我们将使用 from 关键字以便能够在没有点格式的情况下引用模块中特定的函数:
from datetime import datetime然后我们可以用字符串形式定义日期(避免使用 str 作为变量名,以免覆盖内置类型):
date_str = '9/15/18'在将字符串转换为实际的 datetime 对象之前,Python 无法将上述字符串理解为日期时间。我们可以通过调用 strptime 方法成功完成。
执行以下命令转换字符串:
date_object = datetime.strptime(date_str, '%m/%d/%y')现在让我们调用 print 函数用 datetime 格式显示字符串:
print(date_object)输出:
2018-09-15 00:00:00如你所见,转换成功!
你可以看到正斜杠 / 用于分隔字符串的各个元素。这告诉 strptime 方法我们的日期是什么格式,我们的例子中是用 / 作为分隔符。
但是,如果月/日/年被 - 分隔怎么办?你应该这么处理:
from datetime import datetime
date_str = '9-15-18'
date_object = datetime.strptime(date_str, '%m-%d-%y')
print(date_object)输出:
2018-09-15 00:00:00再一次,多亏了格式说明符,strptime 方法能够解析我们的日期并将其转换为日期对象。
结论
在本文中,我们研究了如何在 Python 中格式化日期。我们看到 Python 中的 datetime 模块如何操作日期和时间值。该模块包含了许多操作日期时间的类,比如,time 类用于表示时间值,而 date 类用来表示日历日期值。
学习愉快!
相关阅读
- Python 基础教程
- 在 SublimeEditor 中配置 Python 环境
- Python 代码中添加注释
- Python 中的变量的使用
- Python 中的数据类型
- Python 中的关键字
- Python 字符串操作
- Python 中的 list 操作
- Python 中的 Tuple 操作
- Python max()和 min()–在列表或数组中查找最大值和最小值
- Python 找到最大的 N 个(前 N 个)或最小的 N 个项目
- Python 读写 CSV 文件
- Python 中使用 httplib2–HTTP GET 和 POST 示例
- Python 将 tuple 开箱为变量或参数
- Python 开箱 Tuple–太多值无法解压
- Python multidict 示例–将单个键映射到字典中的多个值
- Python OrderedDict–有序字典
- Python 字典交集–比较两个字典
- Python 优先级队列示例
说明:本文代码基于 Python 3 编写,适用于主流 Python 3.x 版本。datetime 模块为标准库,无需额外安装。 版权声明:本文为原创文章,版权归 戴老师的博客 所有,转载请联系博主获得授权。
本文地址:https://1diff.fun/archives/python-zhong-ru-he-ge-shi-hua-ri-qi.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。