📌  相关文章
📜  在Python中使用日期时间对象和时区

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

在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()的语法是:

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()的语法:

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()方法。

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