[译]Python 中如何格式化日期

栏目: Python · 发布时间: 6年前

内容简介:Python 附带了各种有用的对象,可以直接使用。例如日期对象就是一个例子。由于日期和时间的复杂性,日期类型很难从头开始操作。所幸,Python 日期对象将日期转换成所需的字符串格式变得相当容易。日期格式化是作为程序员的你最重要的任务之一。不同地区表示日期/时间的方法各不相同,因此你作为程序员的一大目标是以用户可读的方式显示日期值。例如,你可能需要用数字格式表示日期值,如 “02-23-2018”。另一方面,你可能需要以更长的文本格式(如 “Feb 23,2018“)表示相同的日期。在另一种情况下,你可能

Python 附带了各种有用的对象,可以直接使用。例如日期对象就是一个例子。由于日期和时间的复杂性,日期类型很难从头开始操作。所幸,Python 日期对象将日期转换成所需的字符串格式变得相当容易。

日期格式化是作为 程序员 的你最重要的任务之一。不同地区表示日期/时间的方法各不相同,因此你作为程序员的一大目标是以用户可读的方式显示日期值。

例如,你可能需要用数字格式表示日期值,如 “02-23-2018”。另一方面,你可能需要以更长的文本格式(如 “Feb 23,2018“)表示相同的日期。在另一种情况下,你可能希望从数字格式的日期值中提取出字符串格式的月份。

在本文中,我们将研究不同类型的日期对象及其功能。

datetime 模块

正如你猜到的, Python 的 datetime 模块包含可用于处理日期和时间值的方法。要使用这个模块,我们得先通过以下 import 语句将其导入:

import datetime
复制代码

我们可以使用 time 类表示时间值。时间类的属性包括小时、分钟、秒和微秒。

time 类的参数是可选的。尽管不指定任何参数,你将获得 0 的时间(对象),但这大多数时候不太可能是你需要的。

例如,要初始化值为 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
Microseconds: 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 2018
复制代码

ctime 方法会使用比我们之前看到的示例更长的日期时间格式。此方法主要用于将 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 方法。这个方法可以帮助我们将日期对象转换为可读字符串。它需要两个参数,语法如下所示:

time.strftime(format, t)
复制代码

第一个参数是格式字符串(以何种格式显示时间日期,感谢 rocheers 提醒),第二个参数是格式化的时间,可选值。

这个方法也可以在 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
%d
%Y
%H
%M
%S

我们没有时间(对象),因此时间值都是 ”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
%A
%B
%w
%m
%p
%y
%f
%Z
%z
%j
%W
%U
%c
%x
%X

译者备注:原文中的是 weekday,在查了一些资料后翻译成 “工作日”,但是考虑以下示例:

from datetime import datetime
x  = datetime.now()
x.strftime("%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 = '9/15/18'
复制代码

在将字符串转换为实际的 datetime 对象之前, Python 无法将上述字符串理解为日期时间。我们可以通过调用 strptime 方法成功完成:

执行以下命令转换字符串:

date_object = datetime.strptime(str, '%m/%d/%y')
复制代码

现在让我们调用 print 函数用 datetime 格式显示字符串:

print(date_object)
复制代码

输出:

2018-09-15 00:00:00
复制代码

如你所见,转换成功!

你可以看到正斜杠 “/” 用于分隔字符串的各个元素。这告诉 strptime 方法我们的日期是什么格式,我们的例子中是用 "/" 作为分隔符。

但是,如果月/日/年被 “-” 分隔怎么办?你应该这么处理:

from datetime import datetime

str = '9-15-18'
date_object = datetime.strptime(str, '%m-%d-%y')

print(date_object)
复制代码

输出:

2018-09-15 00:00:00
复制代码

再一次,多亏了格式说明符, strptime 方法能够解析我们的日期并将其转换为日期对象。

结论

在本文中,我们研究了如何在 Python 中格式化日期。我们看到 Python 中的 datetime 模块如何操作日期和时间值。该模块包含了许多操作日期时间的类,比如, time 类用于表示时间值,而 date 类用来表示日历日期值。

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。

掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能 等领域,想要查看更多优质译文请持续关注 掘金翻译计划 、官方微博、 知乎专栏


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编写高质量代码

编写高质量代码

秦小波 / 机械工业出版社华章公司 / 2011-12-28 / 59.00元

在通往“Java技术殿堂”的路上,本书将为你指点迷津!内容全部由Java编码的最佳实践组成,从语法、程序设计和架构、工具和框架、编码风格和编程思想等五大方面对Java程序员遇到的各种棘手的疑难问题给出了经验性的解决方案,为Java程序员如何编写高质量的Java代码提出了151条极为宝贵的建议。对于每一个问题,不仅以建议的方式从正反两面给出了被实践证明为十分优秀的解决方案和非常糟糕的解决方案,而且还......一起来看看 《编写高质量代码》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具