在Python中使用日期时间对象和时区
在本文中,我们将使用 Datetime 对象并了解它们在引入时区时的行为。我们将使用Python日期时间 模块。
获取日期时间对象
方法一:使用now()方法
获取 Datetime 对象的一种非常简单的方法是使用datetime.now()方法。 DateTime 对象是 datetime.datetime 类的实例/对象。 now()方法返回一个表示当前日期和时间的对象。
Python
# importing datetime module
import datetime
# getting the datetime object
# of current date and time
print(datetime.datetime.now())
Python
# importing datetime module
import datetime
# initialising the datetime object
obj = datetime.datetime(2001, 12, 9)
print(obj)
Python
# importing datetime object
import datetime
# initialising datetime object
obj = datetime.datetime(2001, 12, 9)
# Example 1
print(obj.strftime("%a %m %y"))
# Example 2
print(obj.strftime("%m-%d-%Y %T:%M%p"))
Python
# importing datetime object
import datetime
# initialising datetime object
obj = datetime.datetime(2001, 12, 9, 12, 11, 23)
# Hours
print(obj.hour)
# Minutes
print(obj.minute)
# Seconds
print(obj.second)
Python
# importing datetime object
import datetime
# using strptime() method
print(datetime.datetime.strptime("Jan 1, 2013 12:30 PM",
"%b %d, %Y %I:%M %p"))
Python
# importing datetime object
import datetime
# defining the object
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
# checking timezone information
print(obj.tzinfo)
Python
# importing datetime and pytz
import datetime
import pytz
# defining the object
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
# defining the timezone
tz = pytz.timezone('Asia/Kolkata')
# localising the datetime object
# to the timezone
aware_obj = tz.localize(obj)
# checking timezone information
print(aware_obj.tzinfo)
Python
# importing datetime and pytz
import datetime
import pytz
# defining the object and localising it to a timezone
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
tz = pytz.timezone('Asia/Kolkata')
obj = tz.localize(obj)
# Creating a new timezone
new_tz = pytz.timezone('America/New_York')
# Changing the timezone of our object
new_tz_time = obj.astimezone(new_tz)
# Printing out new time
print(new_tz_time)
Python
# importing datetime and pytz
import datetime
import pytz
# defining the objects
obj1 = datetime.datetime(2001, 11, 15, 1, 20, 25)
obj2 = datetime.datetime(2001, 6, 3, 2, 10, 12)
# Defining the timezone
tz = pytz.timezone('Asia/Kolkata')
# localising the objects to the timezone
obj1 = tz.localize(obj1)
obj2 = tz.localize(obj2)
# printing the differences
print(obj2-obj1)
print(obj1-obj2)
# Checking the object type of the
# difference returned
print(type(obj1-obj2))
Python
# importing datetime and pytz
import datetime
import pytz
# defining the objects
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
# defining a timedelta
diff = datetime.timedelta(days=90, hours=1)
# getting a datetime object
# that is 90 days and 1 hour ahead
new_obj = obj+diff
# Our final answer
print(new_obj)
输出:
2022-01-17 17:15:50.838373
方法 2 :手动定义 Datetime 对象
我们也可以手动声明 DateTime 对象
Python
# importing datetime module
import datetime
# initialising the datetime object
obj = datetime.datetime(2001, 12, 9)
print(obj)
输出:
2001-12-09 00:00:00
在此之后,我们学习如何格式化我们的 Datetime 对象。
格式化 DateTime 对象
有时我们需要以不同的格式打印我们的日期时间对象。对于这些操作,我们将使用strftime()方法。 strftime()的语法是:
Syntax : strftime(format)
Python
# importing datetime object
import datetime
# initialising datetime object
obj = datetime.datetime(2001, 12, 9)
# Example 1
print(obj.strftime("%a %m %y"))
# Example 2
print(obj.strftime("%m-%d-%Y %T:%M%p"))
输出:
Sun 12 01
12-09-2001 00:00:00:00AM
我们可以得到 datetime 对象的不同属性。在下面的代码中,我们将获取小时、分钟和秒。
Python
# importing datetime object
import datetime
# initialising datetime object
obj = datetime.datetime(2001, 12, 9, 12, 11, 23)
# Hours
print(obj.hour)
# Minutes
print(obj.minute)
# Seconds
print(obj.second)
输出:
12
11
23
我们还可以使用strptime()方法获取 datetime 对象,其中我们从字符串获取 DateTime 对象。由于我们使用的字符串可以被格式化为任何形式,我们需要指定预期的格式。为了理解这一点,让我们看一下strptime()的语法:
Syntax : datetime.strptime(data,expected_format)
Parameters :
- data : Our time and date passed as a string in a particular format
- expected_format : the format in which data is presented in the first parameter
Python
# importing datetime object
import datetime
# using strptime() method
print(datetime.datetime.strptime("Jan 1, 2013 12:30 PM",
"%b %d, %Y %I:%M %p"))
输出:
2013-01-01 12:30:00
使用时区
到目前为止,我们一直在使用的 DateTime 对象是所谓的 naive DateTime 对象。一个天真的 DateTime 对象没有关于时区的任何信息。我们可以使用tzinfo进行检查 财产。
Python
# importing datetime object
import datetime
# defining the object
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
# checking timezone information
print(obj.tzinfo)
输出:
None
要设置我们自己的时区,我们必须开始使用pytz 模块。在下一个示例中,我们将首先创建一个 DateTime 对象,然后创建一个 timezone 对象。然后,我们将该时区对象本地化为 DateTime 对象并检查 tzinfo 属性。
Python
# importing datetime and pytz
import datetime
import pytz
# defining the object
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
# defining the timezone
tz = pytz.timezone('Asia/Kolkata')
# localising the datetime object
# to the timezone
aware_obj = tz.localize(obj)
# checking timezone information
print(aware_obj.tzinfo)
输出:
Asia/Kolkata
DateTime 对象从一个时区到另一个时区的转换
要将 DateTime 对象从一个时区转换为另一个时区,我们需要使用astimezone()方法。
Syntax : DateTimeObject.astimezone(tz=None)
tz : The specified timezone to which the DateTimeObject needs to be converted to
Returns : a datetime instance according to the specified time zone parameter tz
Python
# importing datetime and pytz
import datetime
import pytz
# defining the object and localising it to a timezone
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
tz = pytz.timezone('Asia/Kolkata')
obj = tz.localize(obj)
# Creating a new timezone
new_tz = pytz.timezone('America/New_York')
# Changing the timezone of our object
new_tz_time = obj.astimezone(new_tz)
# Printing out new time
print(new_tz_time)
输出:
2001-11-14 14:50:25-05:00
使用 timedelta 类
我们可以检查两个 DateTime 对象之间的差异,它们要么都本地化到同一时区,要么是幼稚的。在下一个示例中,我们将创建两个本地化到同一时区的 DateTime 对象并检查它们的差异。返回的时间差应该是timedelta类的一个对象。
Python
# importing datetime and pytz
import datetime
import pytz
# defining the objects
obj1 = datetime.datetime(2001, 11, 15, 1, 20, 25)
obj2 = datetime.datetime(2001, 6, 3, 2, 10, 12)
# Defining the timezone
tz = pytz.timezone('Asia/Kolkata')
# localising the objects to the timezone
obj1 = tz.localize(obj1)
obj2 = tz.localize(obj2)
# printing the differences
print(obj2-obj1)
print(obj1-obj2)
# Checking the object type of the
# difference returned
print(type(obj1-obj2))
输出:
-165 days, 0:49:47
164 days, 23:10:13
不仅仅是差异,timedelta 对象也可以用于加法。如果我们将 timedelta 对象添加到 datetime 对象,我们会得到另一个 datetime 对象,该对象将 timedelta 考虑为与第一个 datetime 对象的差异。让我们看看这个例子:
Python
# importing datetime and pytz
import datetime
import pytz
# defining the objects
obj = datetime.datetime(2001, 11, 15, 1, 20, 25)
# defining a timedelta
diff = datetime.timedelta(days=90, hours=1)
# getting a datetime object
# that is 90 days and 1 hour ahead
new_obj = obj+diff
# Our final answer
print(new_obj)
输出:
2002-02-13 02:20:25