如何在Python中查找同一小时(包括DST)的第二天的Unix时间戳?

埃普

在Python中,我可以知道本地时区,找到本地时间的Unix时间戳,如下所示(使用pytz):

>>> import datetime as DT
>>> import pytz
>>> mtl = pytz.timezone('America/Montreal')
>>> naive_time3 = DT.datetime.strptime('2013/11/03', '%Y/%m/%d')
>>> naive_time3
datetime.datetime(2013, 11, 3, 0, 0)
>>> localized_time3 = mtl.localize(naive_time3)
>>> localized_time3
datetime.datetime(2013, 11, 3, 0, 0, tzinfo=<DstTzInfo 'America/Montreal' EDT-1 day, 20:00:00 DST>)
>>> localized_time3.timestamp()
1383451200.0

到目前为止,一切都很好。naive_time尚不知道时区,但是localized_time知道其2013年3月3日在蒙特利尔的午夜,所以(UTC)Unix时间戳很不错。此时区也是我的本地时区,此时间戳似乎正确:

$ date -d @1383451200
Sun Nov  3 00:00:00 EDT 2013

现在,时钟在11月3日晚2:00在蒙特利尔这里调整了一个小时,所以那天我们又多了一个小时。这意味着在2013/11/03至2013/11/04之间25个小时这显示了它:

>>> naive_time4 = DT.datetime.strptime('2013/11/04', '%Y/%m/%d')
>>> localized_time4 = mtl.localize(naive_time4)
>>> localized_time4
datetime.datetime(2013, 11, 4, 0, 0, tzinfo=<DstTzInfo 'America/Montreal' EST-1 day, 19:00:00 STD>)
>>> (localized_time4.timestamp() - localized_time3.timestamp()) / 3600
25.0

现在,我正在寻找一种从中获取localized_time4对象的简单方法localized_time3,因为我想在同一时间(此处为午夜)获得下一个本地化的日期我尝试了timedelta,但我认为它不知道时区或DST:

>>> localized_time4td = localized_time3 + DT.timedelta(1)
>>> localized_time4td
datetime.datetime(2013, 11, 4, 0, 0, tzinfo=<DstTzInfo 'America/Montreal' EDT-1 day, 20:00:00 DST>)
>>> (localized_time4td.timestamp() - localized_time3.timestamp()) / 3600
24.0

我的目的是获取有关本地每天在其Unix时间戳记中存储的日志条目的信息。当然,如果我在此处使用localized_time3.timestamp()和添加24 * 3600(与相同localized_time4td.timestamp()),我将错过localized_time4td.timestamp()之间发生的所有日志条目localized_time4td.timestamp() + 3600

换句话说,我正在寻找的函数或方法应该知道何时将25小时,24小时或23小时添加到Unix时间戳,具体取决于DST转换的时间。

电子人

不使用新软件包:

def add_day(x):
    d = x.date()+DT.timedelta(1)
    return mtl.localize(x.replace(year=d.year, month=d.month, day=d.day, tzinfo=None))

完整脚本:

import datetime as DT
import pytz
import calendar
mtl = pytz.timezone('America/Montreal')
naive_time3 = DT.datetime.strptime('2013/11/03', '%Y/%m/%d')
print repr(naive_time3)
#datetime.datetime(2013, 11, 3, 0, 0)
localized_time3 = mtl.localize(naive_time3)
print repr(localized_time3)
#datetime.datetime(2013, 11, 3, 0, 0, tzinfo=<DstTzInfo 'America/Montreal' EDT-1 day, 20:00:00 DST>)
print calendar.timegm(localized_time3.utctimetuple())
#1383451200.0
def add_day(x):
    d = x.date()+DT.timedelta(1)
    return mtl.localize(x.replace(year=d.year, month=d.month, day=d.day, tzinfo=None))
print repr(add_day(localized_time3))
#datetime.datetime(2013, 11, 4, 0, 0, tzinfo=<DstTzInfo 'America/Montreal' EST-1 day, 19:00:00 STD>)

calendar适用于Python2。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用熊猫python从开始时间到第二天开始时间重复添加一小时

从 unix 值中获取前一小时/前一天的时间戳

在同一天在日历中设置时间将移至第二天

如何在MySQL中的第二天和午夜之后查找事件

在列表中查找最接近一小时前的时间戳

MySQL:如何在同一行中显示前一天的数据和第二天的数据

我想在 PHP 中获取第二天中午 12 点的时间戳

如何在Oracle中的日期中添加一天的最后一小时?

如何输出第二天的日期时间

如何在Android中将当前时间与第二天时间进行比较?

如何在 R 中将日期时间更改为第二天的特定时间?

Python大熊猫将瞬时每小时数据重新采样到每日时间步,包括第二天的00:00

如何在php中找到第二天

如何找到第二天?

打字稿:时间戳增加一小时

MYSQL:如何查找带有日期字段的记录,该记录在24小时的时间范围内始终从早上6点到第二天早上6点开始

MSSQL:如何查找带有日期字段的记录,该记录在24小时的时间范围内始终从早上6点到第二天早上6点开始

如何在给定开始日期时间戳的情况下在熊猫中添加日期列,使每一行增加一小时?

如何根据可用性表计算第二天/同一天?

如何在javascript/jquery中为“24小时”时间格式添加一小时?

PHP时间戳在午夜之前更改为第二天

测试时间是否是第二天,不包括午夜

如何使用 TIMEZONE 列获取时间戳(4)的前一小时?

如何使用standardSQL仅提取时间戳的一小时

如何从给定时刻的一天日期时间第二天结束了吗?(JAVA)

SQL Server-基于24小时(第二天)的MyCTE查询

如何在R中从下午5点到第二天凌晨2点算作一天?

在 Spark scala 中创建从时间戳值开始并以时间戳值递增一小时结束的 df

同一小时的总和