Python strftime

Python strftime 是 string format time 的缩写,它允许根据需要格式化日期和时间。顾名思义,您可以使用指定的 strftime 格式选项将给定的 datetime 对象转换为字符串表示。例如,您可以使用 strftime 将日期和时间转换为并显示为“YYYY-MM-DD”或“H:M:S”。

Python strftime 函数是 datetime、time 和 pandas 模块的一部分,您必须导入这些库。本文将介绍如何使用 strftime 解析 datetime 对象、可用格式代码表以及每个格式选项的示例。

Python strftime 函数

它用于格式化日期和时间并返回字符串表示。strftime 函数接受 datetime 对象作为输入,并使用指令对其进行格式化,然后以字符串形式返回输出。

Python datetime 模块中 strftime 函数的语法是

datetime_Object_Value.strftime(Directives)

可用 strftime 指令及其说明的列表。

指令描述输出
%a工作日的缩写周三
%A工作日的完整名称星期三
%b月份名称的缩写一月
%B月份名称的完整名称一月
%c日期和时间的本地版本2019 年 5 月 23 日星期四 10:35:32
%d月份的日期号 01 到 3123
%f微秒 000000 到 999999965060
%H小时 00 到 2315
%I小时 00 到 1210
%j一年中的日期号 001 到 366320
%m月份作为数字 01 到 1205
%M分钟 00 到 5935
%p上午或下午上午
%S秒 00 到 5932
%U一年中的周数 00 到 53,其中一周的第一天 = 星期日20
%w工作日作为数字 0 到 6,其中 0 = 星期日4
%W一年中的周数 00 到 53,其中一周的第一天 = 星期一20
%x日期的本地版本05/23/19
%X时间的本地版本10:35:32
%y年份的缩写19
%Y年份的完整版本2019
%zUTC 偏移量
%Z时区
%%一个 % 字符%

datetime 模块中的 Python strftime

datetime 模块提供了各种处理日期和时间的函数;strftime 就是其中之一。要使用此 strftime 函数,您必须首先导入 datetime 模块。

import datetime

接下来,您需要一个 datetime 对象,因为此函数接受它作为输入。因此,使用 datetime 类创建一个对象。同样,此类有许多方法可以获取特定的日期和时间部分,我们已在另一篇文章中介绍过。

dt = datetime.datetime.now()

一旦您在 strftime 函数中拥有一个 datetime 对象,就可以使用上述任何指令以所需的格式显示日期和时间。以下示例列表给出了大多数常用代码的思路。

Python datetime strftime 示例

此 strftime 示例使用 datetime 类的 now() 函数获取当前数据。接下来,我们使用 strftime 函数从今天的日期和时间返回年份、月份名称、月份编号、日期编号等。

使用此函数从今天的日期获取年份、月份名称、月份编号和日期编号。

from datetime import datetime

dt = datetime.now()

print('Current Date = ', dt)

print('Year in Short            = ', dt.strftime('%y'))
print('Current Year             = ', dt.strftime('%Y'))
print('Month Name in Short      = ', dt.strftime('%b'))
print('Month Name               = ', dt.strftime('%B'))
print('Month Number             = ', dt.strftime('%m'))
print('Day Number of the Month  = ', dt.strftime('%d'))
print('Day Number of the Year   = ', dt.strftime('%j'))
print('Week No of Year 00 to 53 = ', dt.strftime('%U'))
print('Week Number of Year      = ', dt.strftime('%W'))
print('Short Version of Weekday = ', dt.strftime('%a'))
print('Full Version of Weekday  = ', dt.strftime('%A'))
print('Weekday as a Number      = ', dt.strftime('%w'))
Current Date =  2023-05-12 15:27:30.520082
Year in Short            =  23
Current Year             =  2023
Month Name in Short      =  May
Month Name               =  May
Month Number             =  05
Day Number of the Month  =  12
Day Number of the Year   =  132
Week No of Year 00 to 53 =  19
Week Number of Year      =  19
Short Version of Weekday =  Fri
Full Version of Weekday  =  Friday
Weekday as a Number      =  5

从时间戳创建字符串

from datetime import datetime

timestamp = 1487958621
dt = datetime.fromtimestamp(timestamp)

print("datetime object =", dt)

a = dt.strftime("%d/%m/%Y, %H:%M:%S")
print("Example 1 =", a)

b = dt.strftime("%A %d %b, %Y")
print("Example 2 =", b)

c = dt.strftime("%d %B, %Y")
print("Example 3 =", c)

d = dt.strftime("%I %p")
print("Example 4 =", d)
datetime object = 2017-02-24 23:20:21
Example 1 = 24/02/2017, 23:20:21
Example 2 = Friday 24 Feb, 2017
Example 3 = 24 February, 2017
Example 4 = 11 PM

使用区域设置格式化 datetime

我们使用 Python strftime 函数返回当前日期和时间的日期、时间和日期时间的本地版本。

from datetime import datetime
 
dt = datetime.now()
 
print(dt)
 
print('Local Version = ', dt.strftime('%c'))
print('Local Version of Dt          = ', dt.strftime('%x'))
print('Local Version of Tm          = ', dt.strftime('%X'))
2021-05-02 16:00:01.379106
Local Version = Sun May 2 16:00:01 2021
Local Version of Dt = 05/02/21
Local Version of Tm = 16:00:01

将时间转换为字符串格式

让我使用 strftime 从当前 DateTime 类返回小时、分钟、秒、微秒、上午或下午。

from datetime import datetime

dt = datetime.now()
 
print(dt)
print('Hours                 = ', dt.strftime('%H'))
print('Hours                 = ', dt.strftime('%I'))
print('Minutes               = ', dt.strftime('%M'))
print('Seconds               = ', dt.strftime('%S'))
print('Microseconds          = ', dt.strftime('%f'))
print('AM or PM              = ', dt.strftime('%p'))
print('% Charcter           = ', dt.strftime('%%'))

使用此方法输出打印小时、分钟、秒和微秒

2021-05-02 15:57:46.656409
Hours = 15
Hours = 03
Minutes = 57
Seconds = 46
Microseconds = 656409
AM or PM = PM
% Charcter = %

strftime 格式化 DateTime 对象

到目前为止,我们正在使用一个 Python 指令返回日期的一部分。但是,以所需格式格式化日期和时间非常有用。它以年/月/日 时:分:秒 上午/下午 的形式显示当前日期和时间。

import datetime
 
dt = datetime.datetime.now()
 
print(dt)
 
print(dt.strftime('%Y/%m/%d %H:%M:%S %p'))
2021-05-02 15:54:05.603666
2021/05/02 15:54:05 PM

更多格式化选项。

Python strftime function Example

time 模块中的 Python strftime 示例

在此编程中,除了 datetime 模块,time 模块也有 strftime 函数。要使用它,您必须导入 time 库。

time 模块中 strftime 函数的语法如下所示。

time.strftime(Directives, time_object_value)

time 示例

在这里,我们使用了 time 库中的 localtime 函数,并应用了一些可用的 strftime 格式代码。

import time
 
dt = time.localtime(1234567)
 
print(time.strftime('%Y/%M/%d %H:%M:%S %p', dt))
print(time.strftime('%m/%d/%y %H:%M:%S', dt))
print(time.strftime('%d-%m-%Y %I:%M:%S %p', dt))
 
print(time.strftime('%I:%M:%S %p', dt))
1970/26/15 12:26:07 PM
01/15/70 12:26:07
15-01-1970 12:26:07 PM
12:26:07 PM

pandas 模块中的 Python strftime 函数

pandas 模块中可用的 strftime 函数是最强大的一个。pandas 允许您将 strftime 应用于 DataFrame 和 Series,而不是应用于 datetime 对象。因此,您可以使用此函数格式化完整表格中的日期和时间。

Series 示例

在此示例中,我们声明了一个日期序列,并使用带有 %A %d %B %Y %H:%M:%S %p 格式的 strftime 函数来显示工作日名称、日期号、月份名称、年份、小时、分钟、秒以及上午或下午。

import pandas as pd

data = pd.Series(['2015-04-06', '2016-05-10', '2017-06-15', '2018-07-25'])

dts = pd.to_datetime(data)

formatted = dts.dt.strftime('%A %d %B %Y %H:%M:%S %p')

print(formatted)
0      Monday 06 April 2015 00:00:00 AM
1       Tuesday 10 May 2016 00:00:00 AM
2     Thursday 15 June 2017 00:00:00 AM
3    Wednesday 25 July 2018 00:00:00 AM
dtype: object

DataFrame 示例

这个简单的示例展示了如何使用此函数将表格中的日期和时间列转换为给定格式的字符串表示。

import pandas as pd

data = {'name': ['John', 'Mike', 'Suresh', 'Tracy'],
         'Age': [25, 32, 30, 26],
         'Profession': ['Developer', 'Analyst', 'Admin', 'HR'],
         'Salary':[10000, 12000, 9000, 11000],
         'date': ['2015-04-06', '2016-05-09', '2017-06-11', '2018-07-25']
         }

df = pd.DataFrame(data)

df['date'] = pd.to_datetime(df['date'])
df['formatted'] = df['date'].dt.strftime('%A, %d %B %Y')

print(df)
     name  Age Profession  Salary       date                formatted
0    John   25  Developer   10000 2015-04-06    Monday, 06 April 2015
1    Mike   32    Analyst   12000 2016-05-09      Monday, 09 May 2016
2  Suresh   30      Admin    9000 2017-06-11     Sunday, 11 June 2017
3   Tracy   26         HR   11000 2018-07-25  Wednesday, 25 July 2018