Python datetime.datetime.replace()方法
Python是一种动态的、著名的通用语言。它丰富了各种用例和支持库,并有大量来自其开发者的支持。
它提供了一个内置的datetime
模块,使处理日期、时间和时区的工作变得轻而易举。这个模块提供了一些方法和类,如date
,datetime
,tzinfo
,timezone
, 和timedelta
,以处理日期和时间。
这些类充斥着大量的功能和属性,并提供强大的功能。
一个日期,连同时间,被称为DateTime
。创建datetime
对象有时会很繁琐,因为它们接受许多值,如hour
,day
,minutes
,timezone
,seconds
, 等等。
与其手动创建一个新的datetime
对象,我们可以使用一个现有的对象,根据我们的需要调整其值,然后生成一个新的datetime
对象。
每个datetime
对象都拥有一个replace()
,允许我们为其属性指定新的值,并使用这些值生成一个新的datetime
对象。在这篇文章中,我们将深入研究replace()
方法,并在一些相关例子的帮助下彻底理解它。
语法
datetime.replace(
year=self.year,
month=self.month,
day=self.day,
hour=self.hour,
minute=self.minute,
second=self.second,
microsecond=self.microsecond,
tzinfo=self.tzinfo,
fold=0
)
参数
类型 | 解释 | |
---|---|---|
year |
整数 | 一个年份值。 |
month |
整数 | 一个在1到12之间的月份值,包括在内。 |
day |
整数 | 一个在1和31之间的日值,包括在内。 |
hour |
整数 | 一个在0和23之间的小时值,包括在内。 |
minute |
整数 | 一个在0和59之间的分钟值,包括在内。 |
second |
整数 | 一个在0和59之间的秒值,包括在内。 |
microsecond |
整数 | 一个在0和999999之间的微秒值,包括在内。 |
tzinfo |
的一个子类datetime.tzinfo
|
一个具体的类,它是抽象的datetime.tzinfo 类的子类。 |
fold |
整数 | 一个二进制字段,代表一个无效的日期。这里,1 表示一个无效的日期。 |
返回
replace()
方法返回一个新的datetime
对象,该对象的所有属性与原始对象相同,除了那些被提供了新值的属性。
请注意,如果tzinfo
被设置为None
,将返回一个无时区意识的datetime
对象,该对象没有进行日期和时间的转换。
默认情况下,对于天真的或无时区意识的对象,日期和时间是按照UTC或协调世界时来存储的。
例1:修改日期、时间和时区细节
import datetime
cet = datetime.timezone(datetime.timedelta(hours = 2), name = "CET")
ist = datetime.timezone(datetime.timedelta(hours = 5, minutes = 30), name = "India")
d = datetime.datetime(2022, 8, 25, 12, 33, 45, 234154)
print("Naive DateTime:", d)
d = d.astimezone(cet)
print("Timezone-aware DateTime:", d)
print("Changed Date:", d.replace(year = 2001, month = 5, day = 20))
print("Changed Time:", d.replace(hour = 10, minute = 11, second = 30, microsecond = 0))
print("Changed Timezone:", d.replace(tzinfo = ist))
输出:
Naive DateTime: 2022-08-25 12:33:45.234154
Timezone-aware DateTime: 2022-08-25 14:33:45.234154+02:00
Changed Date: 2001-05-20 14:33:45.234154+02:00
Changed Time: 2022-08-25 10:11:30+02:00
Changed Timezone: 2022-08-25 14:33:45.234154+05:30
上面的Python代码首先创建了一个datetime
对象。它还创建了两个时区对象,CET时区 (+02:00
) 和 IST时区 (+05:30
)。
然后使用astimezone()
方法将天真的datetime
转换为一个有时间区的对象。时区被设置为CET,日期和时间值被相应调整。
接下来,使用replace()
方法,日期、时间和时区被更新。请注意,当时区被更新为IST时区时,日期和时间值不会据此调整,这与astimezone()
方法不同;它们仍然与以前一样。
例2:将一个考虑到时区的datetime
转换为一个天真的实例
import datetime
cet = datetime.timezone(datetime.timedelta(hours = 2), name = "CET")
d = datetime.datetime(2022, 8, 25, 12, 33, 45, 234154)
print("Naive DateTime:", d)
d = d.astimezone(cet)
print("Timezone-aware DateTime:", d)
print("Changed Timezone:", d.replace(tzinfo = None))
输出:
Naive DateTime: 2022-08-25 12:33:45.234154
Timezone-aware DateTime: 2022-08-25 14:33:45.234154+02:00
Changed Timezone: 2022-08-25 14:33:45.234154
上面的 Python 代码首先创建了一个datetime
对象。这个对象是天真的(它不知道任何关于时区的信息;没有±HH:MM
的值)。
接下来,我们使用该对象的astimezone()
方法创建一个新的时区感知对象。这个方法接受一个抽象的datetime.tzinfo
类的子类的对象,并返回一个新的datetime
对象。
我们将时区设置为CET或欧洲中部时间。如果我们仔细观察输出结果,我们会发现时间已经改变了2
小时;从12:33:45.234154
到14:33:45.234154+02:00
,它也有一个时区。
CET时区比UTC提前了2
小时。接下来,使用replace()
方法,我们将时区设置为None
。
请注意,现在datetime
对象再次变得天真,但输出告诉我们一个不同的故事。日期和时间值没有恢复到基于UTC的值;时区改变了(14:33:45.234154+02:00
到14:33:45.234154
)。