📜  使用Python的日期时间模块操作日期和时间

📅  最后修改于: 2022-05-13 01:55:28.362000             🧑  作者: Mango

使用Python的日期时间模块操作日期和时间

你有没有想过用Python处理日期和时间?如果你有那么你一定已经注意到Python没有提供任何内置的方法来处理日期或时间。但是由于预装了 Python 的标准实用程序模块的DateTime模块,我们可以根据自己的需要轻松地操作日期和时间。我们甚至可以执行诸如获取当前日期、添加或减去日期和时间等操作。

在本文中,我们将学习使用Python的DateTime模块可以对日期和时间执行的所有操作。因此,在开始之前,让我们先了解一下 DateTime 模块及其包含的类的基础知识。

日期时间类分为 6 个主要类 -

  • date –一个理想化的天真日期,假设当前的公历一直有效,并且永远有效。它的属性是年、月和日。
  • 时间 –一个理想化的时间,独立于任何特定的一天,假设每天正好有 24*60*60 秒。它的属性是小时、分钟、秒、微秒和 tzinfo。
  • datetime –它是日期和时间以及属性年、月、日、小时、分钟、秒、微秒和 tzinfo 的组合。
  • timedelta –以微秒分辨率表示两个日期、时间或日期时间实例之间差异的持续时间。
  • tzinfo -它提供时区信息对象。
  • 时区 –实现 tzinfo 抽象基类作为与 UTC 的固定偏移量的类(3.2 版中的新功能)。

获取当前日期和时间

使用datetime.now()方法获取当前日期和时间。它返回本地当前日期和时间。

句法:



例子:

Python3
# Python3 code to demonstrate 
# Getting current date and time using 
# now(). 
      
# importing datetime module for now() 
import datetime 
      
# using now() to get current time 
current_time = datetime.datetime.now() 
      
# Printing value of now. 
print ("Time now at greenwich meridian is : ", end = "") 
print (current_time)


Python3
# Python3 code to demonstrate 
# attributes of now() 
      
# importing datetime module for now() 
import datetime 
      
# using now() to get current time 
current_time = datetime.datetime.now() 
      
# Printing attributes of now(). 
print ("The attributes of now() are : ") 
      
print ("Year : ", end = "") 
print (current_time.year) 
      
print ("Month : ", end = "") 
print (current_time.month) 
      
print ("Day : ", end = "") 
print (current_time.day) 
      
print ("Hour : ", end = "") 
print (current_time.hour) 
      
print ("Minute : ", end = "") 
print (current_time.minute) 
      
print ("Second : ", end = "") 
print (current_time.second) 
      
print ("Microsecond : ", end = "") 
print (current_time.microsecond)


Python3
# Python program to get 
# current date 
  
  
# Import date class from datetime module 
from datetime import date 
  
  
# Returns the current local date 
today = date.today() 
print("Today date is: ", today)


Python3
from datetime import datetime 
  
# Time object containing 
# the current time. 
time = datetime.now().time() 
  
print("Current Time =", time)


Python3
# Python program to demonstrate 
# strftime() function 
  
  
from datetime import datetime
  
# Getting current date and time 
now = datetime.now() 
print("Without formatting", now) 
  
# Example 1 
s = now.strftime("%a %m %y") 
print('\nExample 1:', s) 
  
# Example 2 
s = now.strftime("%A %-m %Y") 
print('\nExample 2:', s) 
  
# Example 3 
s = now.strftime("%-I %p %S") 
print('\nExample 3:', s) 
  
# Example 4 
s = now.strftime("%-j") 
print('\nExample 4:', s)


Python3
# import datetime
from datetime import timedelta
  
# create timedelta object with difference 
# of 1 weeks
d1 = timedelta(weeks=1)
  
# create timedelta object with difference 
# of 1 weeks
d2 = timedelta(days=30)
  
print(d1)
print(d2)


Python3
# Timedelta function demonstration 
      
from datetime import datetime, timedelta 
      
      
# Using current time 
ini_time_for_now = datetime.now() 
      
# printing initial_date 
print ("initial_date", str(ini_time_for_now)) 
      
# Calculating future dates 
# for two years 
future_date_after_2yrs = ini_time_for_now + timedelta(days = 730) 
      
future_date_after_2days = ini_time_for_now + timedelta(days = 2) 
      
# printing calculated future_dates 
print('future_date_after_2yrs:', str(future_date_after_2yrs)) 
print('future_date_after_2days:', str(future_date_after_2days))


Python3
# import datetime
from datetime import date
  
  
# Create two dates with year, month, 
# date
d1 = date(2021, 3, 16)
d2 = date(2021, 3, 31)
  
# Difference between two dates
diff = d2 - d1
  
print("Difference: ", diff.days)


Python3
# import datetime
from datetime import datetime
  
  
# Create two dates with year, month, 
# date, hour, minute, seconds
d1 = datetime(2021, 3, 16, 19, 6, 6)
d2 = datetime(2021, 3, 31, 12, 2, 2)
  
# Difference between two dates
diff = d2 - d1
  
print("Difference: ", diff)


Python3
# Simple Python program to compare dates 
  
# importing datetime module 
import datetime 
  
# date in yyyy/mm/dd format 
d1 = datetime.datetime(2018, 5, 3) 
d2 = datetime.datetime(2018, 6, 1) 
  
# Comparing the dates will return 
# either True or False 
print("d1 is greater than d2 : ", d1 > d2) 
print("d1 is less than d2 : ", d1 < d2) 
print("d1 is not equal to d2 : ", d1 != d2)


Python3
import datetime as dt 
from dateutil import tz 
  
  
tz_string = dt.datetime.now(dt.timezone.utc).astimezone().tzname() 
  
print("datetime.now() :", tz_string) 
  
NYC = tz.gettz('Europe / Berlin') 
dt1 = dt.datetime(2015, 5, 21, 12, 0) 
dt2 = dt.datetime(2015, 12, 21, 12, 0, tzinfo = NYC) 
  
print("Naive Object :", dt1.tzname()) 
print("Aware Object :", dt2.tzname())


Python3
from datetime import datetime 
from pytz import timezone 
  
format = "%Y-%m-%d %H:%M:%S %Z%z"
  
# Current time in UTC 
now_utc = datetime.now(timezone('UTC')) 
print(now_utc.strftime(format)) 
  
# Convert to Asia/Kolkata time zone 
now_asia = now_utc.astimezone(timezone('Asia/Kolkata')) 
print(now_asia.strftime(format))


输出:

Time now at greenwich meridian is : 2021-03-16 17:59:03.837572

now()函数具有各种属性,可以从上述输出中提供所需的详细信息。一些属性是年、月、日期、小时、分钟、秒。请参阅下面的示例以更好地理解。

例子:

蟒蛇3

# Python3 code to demonstrate 
# attributes of now() 
      
# importing datetime module for now() 
import datetime 
      
# using now() to get current time 
current_time = datetime.datetime.now() 
      
# Printing attributes of now(). 
print ("The attributes of now() are : ") 
      
print ("Year : ", end = "") 
print (current_time.year) 
      
print ("Month : ", end = "") 
print (current_time.month) 
      
print ("Day : ", end = "") 
print (current_time.day) 
      
print ("Hour : ", end = "") 
print (current_time.hour) 
      
print ("Minute : ", end = "") 
print (current_time.minute) 
      
print ("Second : ", end = "") 
print (current_time.second) 
      
print ("Microsecond : ", end = "") 
print (current_time.microsecond)

输出:

The attributes of now() are : 
Year : 2021
Month : 3
Day : 16
Hour : 18
Minute : 1
Second : 59
Microsecond : 490402

仅获取当前日期

DateTime 模块还提供了另一种称为today() 的方法,该方法仅打印今天的日期值。

例子:



蟒蛇3

# Python program to get 
# current date 
  
  
# Import date class from datetime module 
from datetime import date 
  
  
# Returns the current local date 
today = date.today() 
print("Today date is: ", today)

输出:

Today date is:  2021-03-16

只获取当前时间

我们可以使用time()函数创建一个时间对象。考虑下面的例子。

例子:

蟒蛇3

from datetime import datetime 
  
# Time object containing 
# the current time. 
time = datetime.now().time() 
  
print("Current Time =", time)

输出:

Current Time = 18:13:35.003918

请参阅以下文章以获取有关获取当前日期和时间的详细信息。

  • 使用Python获取当前日期和时间
  • 使用Python获取当前日期
  • 获取当前时间的Python程序
  • 使用Python以毫秒为单位获取当前时间
  • 使用Python获取不同时区的当前时间

格式化日期和时间

在世界不同地区,使用不同类型的日期格式。 DateTime 提供strftime() 处理这种格式的方法。此函数用于将日期和时间对象转换为其字符串表示形式。它接受一个或多个格式化代码的输入并返回字符串表示。

句法:

例子:

蟒蛇3

# Python program to demonstrate 
# strftime() function 
  
  
from datetime import datetime
  
# Getting current date and time 
now = datetime.now() 
print("Without formatting", now) 
  
# Example 1 
s = now.strftime("%a %m %y") 
print('\nExample 1:', s) 
  
# Example 2 
s = now.strftime("%A %-m %Y") 
print('\nExample 2:', s) 
  
# Example 3 
s = now.strftime("%-I %p %S") 
print('\nExample 3:', s) 
  
# Example 4 
s = now.strftime("%-j") 
print('\nExample 4:', s)

输出:



Without formatting 2021-03-16 18:28:59.055609

Example 1: Tue 03 21

Example 2: Tuesday 3 2021

Example 3: 6 PM 59

Example 4: 75

请参阅以下文章以获取有关在Python格式化日期和时间的详细信息。

  • 在Python格式化日期

处理 timedelta 对象

Python timedelta()函数存在于 datetime 库中,它通常用于计算日期差异,也可用于Python的日期操作。

句法:

例子:

蟒蛇3

# import datetime
from datetime import timedelta
  
# create timedelta object with difference 
# of 1 weeks
d1 = timedelta(weeks=1)
  
# create timedelta object with difference 
# of 1 weeks
d2 = timedelta(days=30)
  
print(d1)
print(d2)

输出:

7 days, 0:00:00
30 days, 0:00:00

我们还可以使用+运算符从 datetime 对象中添加或减去 timedelta 对象。

例子:

蟒蛇3

# Timedelta function demonstration 
      
from datetime import datetime, timedelta 
      
      
# Using current time 
ini_time_for_now = datetime.now() 
      
# printing initial_date 
print ("initial_date", str(ini_time_for_now)) 
      
# Calculating future dates 
# for two years 
future_date_after_2yrs = ini_time_for_now + timedelta(days = 730) 
      
future_date_after_2days = ini_time_for_now + timedelta(days = 2) 
      
# printing calculated future_dates 
print('future_date_after_2yrs:', str(future_date_after_2yrs)) 
print('future_date_after_2days:', str(future_date_after_2days)) 

输出:

initial_date 2021-03-16 18:47:53.103230
future_date_after_2yrs: 2023-03-16 18:47:53.103230
future_date_after_2days: 2021-03-18 18:47:53.103230

注意:输出将是一个 DateTime 对象。



两个日期之间的差异

如上所述,timedelta 对象表示两个日期之间的差异。我们可以从另一个日期中减去一个日期,结果将是一个 timedelta 对象。

示例 1:

蟒蛇3

# import datetime
from datetime import date
  
  
# Create two dates with year, month, 
# date
d1 = date(2021, 3, 16)
d2 = date(2021, 3, 31)
  
# Difference between two dates
diff = d2 - d1
  
print("Difference: ", diff.days)

输出:

Difference:  15

示例 2:

蟒蛇3

# import datetime
from datetime import datetime
  
  
# Create two dates with year, month, 
# date, hour, minute, seconds
d1 = datetime(2021, 3, 16, 19, 6, 6)
d2 = datetime(2021, 3, 31, 12, 2, 2)
  
# Difference between two dates
diff = d2 - d1
  
print("Difference: ", diff)

输出:

Difference:  14 days, 16:55:56

请参阅以下文章以获取有关查找日期差异的详细信息。

  • 使用 datetime.timedelta() 方法的两个日期之间的差异(以分钟为单位)
  • Python程序来查找两个给定日期之间的天数

比较日期

日期也可以使用比较运算符进行比较(如<,>,<=,> =,!=等)

实施例1:使用运算符

蟒蛇3

# Simple Python program to compare dates 
  
# importing datetime module 
import datetime 
  
# date in yyyy/mm/dd format 
d1 = datetime.datetime(2018, 5, 3) 
d2 = datetime.datetime(2018, 6, 1) 
  
# Comparing the dates will return 
# either True or False 
print("d1 is greater than d2 : ", d1 > d2) 
print("d1 is less than d2 : ", d1 < d2) 
print("d1 is not equal to d2 : ", d1 != d2)

输出:

d1 is greater than d2 :  False
d1 is less than d2 :  True
d1 is not equal to d2 :  True

请参阅以下文章以获取有关比较日期的详细信息。



  • 在Python比较日期

使用不同的时区

datetime.now() 没有关于时区的任何信息。它只使用当前系统时间。在某些情况下,可能需要时区详细信息。在这种情况下,会使用 tzinfo 抽象类。 tzinfo 是一个抽象基类。不能直接实例化。一个具体的子类必须派生它并实现这个抽象类提供的方法。

Naive 和 Aware 日期时间对象

一个不包含任何时区信息的日期时间对象被称为一个简单的日期时间对象。对于一个简单的 datetime 对象,datetime_object.tzinfo 将为 None。 Aware datetime 对象包含嵌入其中的时区信息。

tzinfo 基类中可实现的方法有:

  • utcoffset():它返回作为参数传递的日期时间实例的偏移量。它指的是时区偏移量,表示时区比协调世界时或世界时坐标 (UTC) 提前多少小时。偏移量写为 +00:00。例如:Asia/Taipei,写成UTC+08:00。
  • dst():缩写为夏令时。它表示在夏季将时钟提前 1 小时,以便根据时钟夜幕降临。它被设置为开或关。它基于包含 9 个元素的元组进行检查,如下所示:
  • tzname():用于查找传递的日期时间对象的时区名称。它返回一个Python字符串对象。
  • fromutc():该函数以UTC为单位获取对象的日期和时间,并返回等效的本地时间。它主要用于调整日期和时间。它是从默认的 datetime.astimezone() 实现调用的。 dt.tzinfo 将作为 self 传递,dt 的日期和时间数据将作为等效的本地时间返回。

例子:

蟒蛇3

import datetime as dt 
from dateutil import tz 
  
  
tz_string = dt.datetime.now(dt.timezone.utc).astimezone().tzname() 
  
print("datetime.now() :", tz_string) 
  
NYC = tz.gettz('Europe / Berlin') 
dt1 = dt.datetime(2015, 5, 21, 12, 0) 
dt2 = dt.datetime(2015, 12, 21, 12, 0, tzinfo = NYC) 
  
print("Naive Object :", dt1.tzname()) 
print("Aware Object :", dt2.tzname())

输出:

datetime.now() : UTC
Naive Object : None
Aware Object : CET

我们还可以使用pytz模块来处理跨时区转换。让我们看看它是如何工作的。

使用 Pytz

Pytz将 Olson tz 数据库引入Python ,因此支持几乎所有时区。该模块提供日期时间转换功能,并帮助用户为国际客户群提供服务。

通过使用astimezone()函数,我们可以将时间转换为不同的时区。



句法:

例子:

蟒蛇3

from datetime import datetime 
from pytz import timezone 
  
format = "%Y-%m-%d %H:%M:%S %Z%z"
  
# Current time in UTC 
now_utc = datetime.now(timezone('UTC')) 
print(now_utc.strftime(format)) 
  
# Convert to Asia/Kolkata time zone 
now_asia = now_utc.astimezone(timezone('Asia/Kolkata')) 
print(now_asia.strftime(format))

输出:

2021-03-17 07:41:19 UTC+0000
2021-03-17 13:11:19 IST+0530

请参阅以下文章以获取有关使用时区的详细信息。

  • Python – datetime.tzinfo()
  • Python|时区转换
  • Python皮茨