Python datetime 对象

与其他编程语言不同,Python 不允许我们直接使用日期对象。要在 Python 中使用日期和时间对象,您必须导入一个 datetime 模块。

这个 datetime 模块包含用于处理日期或操作日期和时间的类,可以格式化它们,还包含 timedelta、strptime 和 strftime 类以及实际示例。

此 Python datetime 对象的语法包含 Year_Number、Month_Number、Day_Number、Hours、Minutes 和 Seconds 参数。

Python datetime 示例

让我向您展示此 datetime 模块中可用方法的列表。为此,您需要使用 dir 函数参数。

import datetime
 
print(dir(datetime))

此模块中可用方法的列表。

['MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__', '__doc__', 
'__file__', '__loader__', '__name__', '__package__', '__spec__', 'date',  
'sys', 'time', 'timedelta', 'timezone', 'tzinfo']

datetime 类

此类具有年、月和日属性。在这里,第一个 print 语句提取并返回当前日期的年份。接下来的两个 print 语句返回月份和日期。请注意,我们将此类分配并使用了别名 gm。

import datetime as gm
 
today = gm.date.today()
 
print('Today\'s Date = ', today)
print('Year     = ', today.year)
print('Month = ', today.month)
print('Day     = ', today.day)
Today's Date =  2021-05-03
Year  =  2021
Month =  5
Day   =  3

MAXYEAR 返回模块支持的最大(最高)年份,即 9999。MINYEAR 返回允许的最小年份,即 1。

print('Maximum Year  = ', gm.MAXYEAR)
print('Minimum Year  = ', gm.MINYEAR) 
Maximum Year  =  9999
Minimum Year  =  1

Python datetime 今天和现在

这个 Python 模块具有 now 函数,也具有 today 函数,它们都返回当前的日期和时间。

dt = gm.datetime.now()
print(dt)
 
print('Today\'s Dt = ', dt)

print()
dt = gm.date.today()
 
print('\nToday\'s Dt = ', dt)
2021-05-03 16:03:25.186286
Today's Dt =  2021-05-03 16:03:25.186286

Today's Dt =  2021-05-03

datetime 类属性

到目前为止,我们使用的是基本的导入选项,这就是为什么我们使用两次关键字和 method_name。但是,如果我们使用下面的导入技术,就可以消除额外的步骤。

此示例显示了 datetime 类中所有可用属性的列表。它们是 Year、Month、Day of Month、hour、minute、second、microsecond 和 weekday。我们还展示了用于从当前提取和返回日期和时间的可用函数。

from datetime import datetime as syd
 
dt = syd.now()
 
print('Date           = ', dt)
print('Short Date = ', dt.date())
print('Year           = ', dt.year)
print('Month          = ', dt.month)
print('Day            = ', dt.day)
print('Time           = ', dt.time())
print('Hour           = ', dt.hour)
print('Minute         = ', dt.minute)
print('Second         = ', dt.second)
print('Microsecond    = ', dt.microsecond)
print('Weekday Number = ', dt.weekday())
Date =  2021-05-03 16:00:39.908339
Short Date     = 2021-05-03
Year           =  2021
Month          =  5
Day            =  3
Time           =  16:00:39.908339
Hour           =  16
Minute         =  0
Second         =  39
Microsecond    =  908339
Weekday Number =  0

Python datetime 模块具有 time 类,用于处理或操作时间值。在这里,我们使用 time 类来写入当前日期和时间的时间。接下来,我们使用 print 语句通过可用的 hour、minute、second 和 microsecond 属性返回时间部分。

 
time = syd.time(syd.now())
 
print('Current Time                  = ', time)
print('Hour from Current Time        = ', time.hour)
print('Minute from Current Time      = ', time.minute)
print('Second from Current Time      = ', time.second)
print('Microsecond from Current Time = ', time.microsecond)
Python datetime Example

datetime isoformat

这个 datetime 类具有 isoformat,它返回 ISO 8601 格式的日期字符串表示形式 YYYY-MM-DD

print(syd.now())
print(syd.now().isoformat())
2021-05-03 16:05:47.074065
2021-05-03T16:05:47.103824

使用 datetime 模块创建日期和时间

在这里,我们使用此函数创建自定义日期对象,该对象接受年、月、日、小时、分钟、秒和微秒。第一个语句创建一个自定义 dt,其中小时为零或没有时间。第四个创建 dt,第五个返回微秒。

 
dt1 = syd(2017, 12, 31)
print(dt1)

dt4 = syd(2014, 12, 31, 22, 33, 44)
print(dt4)
 
dt5 = syd(2016, 12, 31, 22, 33, 44, 123456)
print(dt5)
2017-12-31 00:00:00
2014-12-31 22:33:44
2016-12-31 22:33:44.123456

datetime timestamp 函数

Python datetime timestamp 函数返回 POSIX 时间戳。utcfromtimestamp 方法从给定时间戳返回 UTC。在这里,我们同时使用这两个函数来返回当前时间戳和 UTC。

print("--- timestamp Result---") 
dt = syd.now()
print(dt)
print(dt.timestamp())

print("\n---utcfromtimestamp Result---")
tm_stamp = syd.utcfromtimestamp(123456789)
print(tm_stamp)
 
tm_stamp2 = syd.utcfromtimestamp(482056789)
print(tm_stamp2)
 
tm_stamp3 = syd.utcfromtimestamp(19023456789)
print(tm_stamp3)
 
tm_stamp4 = syd.utcfromtimestamp(12761456789)
print(tm_stamp4)
--- timestamp Result---
2021-05-03 17:39:20.605253
1620043760.605253

---utcfromtimestamp Result---
1985-04-11 08:39:49
2572-10-29 21:33:09
2374-05-25 01:06:29

datetime replace

datetime replace 函数用新值替换日期和时间部分。此 replace 的语法是

repalce(year = self.year, month = self.month, day = self.day, hour = self.hour, minute = self.minute, second = self.second, microsecond = self.microsecond, tzinfo = self.tzinfo)

我们替换了小时、分钟、秒和微秒。

 
dt = syd.now()
print(dt)
 
dt_replace = dt.replace(hour = 2)
print(dt_replace)
 
dt_replace2 = dt.replace(minute = 59)
print(dt_replace2)
 
dt_replace3 = dt.replace(second = 4)
print(dt_replace)
 
dt_replace4 = dt.replace(microsecond = 7)
print(dt_replace4)
2021-05-03 17:38:03.697423
2021-05-03 02:38:03.697423
2021-05-03 17:59:03.697423
2021-05-03 17:38:04.697423
2021-05-03 17:38:03.000007

以下是此类中所有其他可用属性和函数的列表。

dt = syd.now()
 
print('Replace         = ', dt.replace(hour = 2))
print('Tzinfo          = ', dt.tzinfo)
print('Tzname          = ', dt.tzname())
 
print('Timetz          = ', dt.timetz())
print('Timestamp       = ', dt.timestamp())
print('Time            = ', dt.ctime())
print('isoweekday      = ', dt.isoweekday())
 
print('astimezone      = ', dt.astimezone())
print('utcoffset       = ', dt.utcoffset())
print('Daylight Saving = ', dt.dst())
Replace         =  2021-05-03 02:37:16.992139
Tzinfo          =  None
Tzname          =  None
Timetz          =  17:37:16.992139
Timestamp       =  1620043636.992139
Time            =  Mon May  3 17:37:16 2021
isoweekday      =  1
astimezone      =  2021-05-03 17:37:16.992139+05:30
utcoffset       =  None
Daylight Saving =  None

datetime combine

combine 函数通过组合给定的日期值和时间来返回一个新对象。此 combine 的语法是

combine(date, time, tzinfo = self.tzinfo)

首先,我们声明了一个自定义日期和一个自定义时间。接下来,我们使用 combine 函数组合这些对象并返回日期和时间。然后,我们通过可用的属性返回 dt 部分。

在此示例中,我们使用 time 函数,但未提供秒值。接下来,我们使用 combine 函数组合了 dt。

import datetime as syt
 
dt = syt.date(2018, 12, 31)
 
tm = syt.time(23, 59, 58)

tm2 = syt.time(23, 0)
 
combine_dt = syt.datetime.combine(dt, tm)
combine_dt2 = syt.datetime.combine(dt, tm2)
 
print('Date           = ', dt)
print('Time           = ', tm)
print('Time2          = ', tm2)
print('Date and Time  = ', combine_dt)
print('Date and Time2 = ', combine_dt2)
 
print('Year           = ', combine_dt.year)
print('Month          = ', combine_dt.month)
print('Day            = ', combine_dt.day)
print('Hour           = ', combine_dt.hour)
print('Minute         = ', combine_dt.minute)
print('Second         = ', combine_dt.second)
print('Microsecond    = ', combine_dt.microsecond)
Date           =  2018-12-31
Time           =  23:59:58
Time2          =  23:00:00
Date and Time  =  2018-12-31 23:59:58
Date and Time2 =  2018-12-31 23:00:00
Year           =  2018
Month          =  12
Day            =  31
Hour           =  23
Minute         =  59
Second         =  58
Microsecond    =  0

Python datetime date 类

此模块具有 date 类,可用于操作日期或工作。它有三个重要属性。

  • min:它返回最早或最小的可表示日期。
  • max:最新或最大的可表示日期。
  • resolution:连续日期之间的最小可能差异。

date 类属性

在我们之前的所有示例中,我们都使用 now 或 today 处理当前的 dt。但是,您可以使用 date 函数创建自定义日期。在这里,我们正在使用它并以 iso 格式返回它。

from datetime import date
 
dt = date(2018, 1, 31)
print(dt)
print(dt.isoformat())
2018-01-31
2018-01-31

我们使用 datetime today 方法返回当前日期,然后使用这三个属性。

此示例显示了可用的日期属性列表。在这里,year 属性返回当前本地日期的年份,month = 月份编号,day = 月份中的日期,weekday = 星期几。

 
dt = date.today()
 
print('Today\'s Date  = ', dt)
print('Year           = ', dt.year)
print('Month          = ', dt.month)
print('Day            = ', dt.day)
print('Weekday Number = ', dt.weekday())
print('\nMinimum          = ', date.min)
print('Maximum         = ', date.max)
print('Resolution       = ', date.resolution)
Today's Date   =  2021-05-03
Year           =  2021
Month          =  5
Day            =  3
Weekday Number =  0

Minimum        =  0001-01-01
Maximum        =  9999-12-31
Resolution     =  1 day, 0:00:00

它还有一个 date 函数,可以从年份、月份和月份日期创建自定义日期。fromtimestamp 函数接受 POSIX 时间戳值作为参数并从中返回日期。

dt = date(2018, 1, 31)
print(dt)

print("\n---fromtimestamp Result ---") 

tm_stamp = date.fromtimestamp(123456789)
print(tm_stamp)
 
tm_stamp2 = date.fromtimestamp(412056789)
print(tm_stamp2)
 
tm_stamp3 = date.fromtimestamp(9123456789)
print(tm_stamp3)
 
tm_stamp4 = date.fromtimestamp(8761456789)
print(tm_stamp4)
2018-01-31

---fromtimestamp Result ---
1973-11-30
1983-01-22
2259-02-10
2247-08-22

time 类

Python datetime 对象具有 time 类,它帮助我们处理时间并进行操作。它具有以下 3 个重要属性。

  • min:它返回最早或最小的可表示时间。
  • max:最新或最大的可表示时间对象。
  • resolution:时间之间的最小可能差异。

第一个语句使用 time 方法返回 00:00:00。在第二个语句中,我们使用该函数来构造或创建时间为 10 小时、22 分钟和 33 秒。接下来,我们使用这些重要属性。

from datetime import time
 
tt = time()
print(tt)
print()

tt2 = time(10, 22, 33)
print(tt2)

print('\nMinimum         = ', time.min)
print('Maximum        = ', time.max)
print('Resolution       = ', time.resolution)
00:00:00

0:22:33

Minimum         =  00:00:00
Maximum         =  23:59:59.999999
Resolution      =  0:00:00.000001

time 属性

此示例显示了可用的时间属性列表。在这里,hour 属性从给定的分钟、秒和微秒返回小时。

 
tt = time(10, 50, 33)
print('Time  = ', tt)
 
print('Hours        = ', tt.hour)
print('Minutes      = ', tt.minute)
print('Seconds      = ', tt.second)
print('Microseconds = ', tt.microsecond)
Time         =  10:50:33
Hours        =  10
Minutes      =  50
Seconds      =  33
Microseconds =  0

在 Python datetime 中创建时间

此 time 示例是以上示例的扩展。在这里,我们使用微秒和参数名称。

from datetime import datetime as syd, time
 
tme = syd.time(syd.now())
print('Current Time = ', tme)
 
tt = time()
print(tt)
 
tt1 = time(10, 22, 45)
print(tt1)
 
tt2 = time(11, 34, 49, 890765)
print(tt2)
 
tt3 = time(hour = 17, minute = 11, second = 33)
print(tt3)
 
tt4 = time(hour = 17, minute = 22, second = 55, microsecond = 223344)
print(tt4)
Current Time = 16:12:24.490551
00:00:00
10:22:45
11:34:49.890765
17:11:33
17:22:55.223344

Python datetime timedelta、strftime 和 strptime

timedelta 对象预测或返回过去和未来的日期。在此示例中,我们返回一年后的日期和时间以及两年前的日期和时间。请参阅 timedelta

strftime 方法以指定格式格式化日期,并以字符串形式返回。在这里,%Y-%m-%d 意味着年-月-日 (2019-01-31)。请参阅 strftime

strptime 将日期的字符串表示转换为常规日期和时间,将字符串转换为 dt。在这里,strptime(dt_str, ‘%d %B %Y’)意味着字符串日期以 Day Month_Name Year 格式传入。请参阅 strptime

from datetime import datetime, timedelta
 
dt = datetime.now()
 
print('Dt         = ', dt)
 
future_dt = dt + timedelta(days = 365)
print('Future = ', future_dt)
 
past_dt = dt - timedelta(days = 730)
print('Past    = ', past_dt)

print("\n-----strftime Results----")
dt2 = dt.strftime('%Y-%m-%d')
print(dt2)
 
dt3 = dt.strftime('%Y/%m/%d %H:%M:%S %p')
print(dt3)
 
dt4 = dt.strftime('%B %d, %Y %I-%M-%S %p')
print(dt4)

print("\n-----strptime Results----")
dt_str = '31 December 2017'
dt_value = dt.strptime(dt_str, '%d %B %Y')
print(dt_value)
 
dt_str2 = '15/8/17 22:33:55'
dt_value2 = dt.strptime(dt_str2, '%d/%m/%y %H:%M:%S')
print(dt_value2)
Dt      =  2021-05-03 16:10:47.540318
Future  =  2022-05-03 16:10:47.540318
Past    =  2019-05-04 16:10:47.540318

-----strftime Results----
2021-05-03
2021/05/03 16:10:47 PM
May 03, 2021 04-10-47 PM

-----strptime Results----
2017-12-31 00:00:00
2017-08-15 22:33:55