确定当前日期的开始和结束时间(UTC - > EST - > UTC); Python

2024-05-01 16:06:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我将所有时间都存储在UTC中,并且我的系统设置为UTC(尽管我在EST中)。

我的日期存储为:

Wed, 20 Feb 2013 03:51:39 +0000

但是,我想为EST选择基于今天的信息,因此我试图:

  • 获取当前时间为UTC并更改为EST

    datetime.utcnow().replace(tzinfo=tz.tzutc()).astimezone(tz.gettz('America/New_York'))
    2013-02-19 23:17:20.560898-05:00
    
  • 接下来,我想得到EST日(2013-02-19 00:00:00.000000-05:00)的开始时间和结束时间(2013-02-19 23:59:59.99999-05:00)

  • 一旦我有了这些值,我想转换回UTC,这样我就有了一个高值和低值,我可以用它来钳制我的EST(我的时区)。

如果这不是最好的方法,或者我错过了什么(对我来说似乎太复杂了),请帮助我看到光明!

短暂性脑缺血发作

按答案更新:

d1 = datetime.utcnow().replace(tzinfo=tz.tzutc()).astimezone(tz.gettz('America/New_York'))
print d1.strftime("%m %d %Y") ; d2 = d1.replace(day=d1.day + 1) ; print d2.strftime("%m %d %Y")

那会给我

02 20 2013
02 21 2013

这是正确的。我现在需要从中生成最长时间,然后转换为UTC。我搞不懂。实际上,我可能想在完成时转换为UTC epoch时间戳,因为这将使我的数据库操作非常简单(<;、>;、==,等等)。


Tags: newdatetime时间replacetzd1estutc
3条回答

我肯定会看一眼,解决你的问题需要遵循几个步骤。

首先需要分析字符串。很好地使用了Deloreanparse方法。

>>> from delorean import parse
>>> d = parse("Wed, 20 Feb 2013 03:51:39 +0000")
>>> d
Delorean(datetime=2013-02-20 03:51:39+00:00, timezone=UTC)

一旦在Delorean对象中解析了日期时间,就可以简单地转换为EST

>>> d = d.shift('US/Eastern')
>>> d
Delorean(datetime=2013-02-19 22:51:39-05:00, timezone=US/Eastern)

尽管毫无意义。你从来不用它来回答你的问题,但和德洛林在一起很容易。

那么你现在在东部时间

从delorean进口delorean

>>> d1 = Delorean(timezone="US/Eastern")
>>> d1
Delorean(datetime=2013-02-21 00:35:56.405256-05:00, timezone=US/Eastern)

现在开始truncation步骤。

>>> d.truncate('day')
Delorean(datetime=2013-02-21 00:00:00-05:00, timezone=US/Eastern)

执行上述简单的转换到UTC。

现在结束一天。

d = d.next_day(1) # move to the next day

再往后移一秒钟。图书馆需要的东西我会更新的。只需通过使用datetime属性从Delorean示例中获取datetime。

d.datetime - timedelta(seconds=1)
datetime.datetime(2013, 2, 21, 23, 59, 59, tzinfo=<DstTzInfo 'US/Eastern' EST-1 day, 19:00:00 STD>)

祝你好运,但是这个库应该只处理日期时间操作:)

将当前时间设为UTC并将其转换为EST的第一步似乎有点毫无意义。你用那时间做什么吗?

除此之外,它似乎有点偏激。您希望获得UTC格式的一天EST的开始和结束时间,因此可以创建它们并将它们转换为UTC格式。这并不复杂。:-)

不过,您可能需要查看匹配的例程,以便可以使用“今日开始”作为较低的值,使用“明天开始”作为较高的值,这样就不必处理23:59:59.9999的时间。

更新:

根据我对你问题的最初理解,这就是你想做的:

首先你想得到当前日期,因为它是在UTC(所以在美国东部时间晚上11点12点,你想要22日,因为它是22日在UTC然后)。

>>> from datetime import datetime
>>> today = datetime.utcnow().date()
>>> today
datetime.date(2013, 2, 21)

其次,您希望在UTC中使用当天的00:00:00作为搜索的开始。

>>> from dateutil import tz
>>> start = datetime(today.year, today.month, today.day, tzinfo=tz.tzutc())
datetime.datetime(2013, 2, 21, 0, 0, tzinfo=tzutc())

除了你想知道纽约的时间:

>>> from dateutil import tz
>>> est = tz.gettz('America/New_York')
>>> start = start.astimezone(est)
>>> start
datetime.datetime(2013, 2, 20, 19, 0, tzinfo=tzfile('/usr/share/zoneinfo/America/New_York'))

你也希望明天作为结束:

>>> from datetime import timedelta
>>> end = start + timedelta(1)
>>> end
datetime.datetime(2013, 2, 21, 19, 0, tzinfo=tzfile('/usr/share/zoneinfo/America/New_York'))

总结:

today = datetime.utcnow().date()
start = datetime(today.year, today.month, today.day, tzinfo=tz.tzutc()).astimezone(est)
end = start + timedelta(1)

使用datetimepytz将解决您的问题。

def get_start_and_end():
    tz = pytz.timezone('Asia/Shanghai')
    today = datetime.now(tz=tz)
    start = today.replace(hour=0, minute=0, second=0, microsecond=0)
    end = start + timedelta(1)

    return start, end

相关问题 更多 >