当前位置: 首页 > 面试题库 >

等时格式的时区字段

谭泳
2023-03-14
问题内容

我有一个时间戳应该在EST中:

2014-10-06T18:06:40-04:56

我了解第一部分:2014-10-06T18:06:40,但不了解-04:56

-04:56这里是什么意思?

这是我获得该时间戳记的方式:

import datetime
start_time = datetime.datetime(year  = 2014, 
                               month = 10, 
                               day   = 6, 
                               hour  = 18, 
                               tzinfo = pytz.timezone('US/Eastern'))
end_time   = start_time + datetime.timedelta(seconds=400)

接着:

end_time.isoformat()

返回:

2014-10-06T18:06:40-04:56

问题答案:

问题是pytz

…不同于已记录的tzinfo实现的Python API;如果要创建本地时间,则需要使用本localize()文档中介绍的方法…

再往下走,它说:

不幸的是,在许多时区中,使用标准datetime构造函数的tzinfo参数对pytz都不起作用。

>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt)
'2002-10-27 12:00:00 LMT+0020'

因此,您需要按照文档的建议进行操作-使用normalize,构造UTC时间和使用astimezone,等等。要选择哪一个取决于您要执行的操作。例如:

>>> from datetime import datetime
>>> from pytz import timezone
>>> utc = timezone('UTC')
>>> eastern = timezone('US/Eastern')
>>> datetime(2014, 10, 6, 18, tzinfo=eastern).isoformat()
'2014-10-06T18:00:00-04:56'
>>> eastern.normalize(datetime(2014, 10, 6, 18, tzinfo=eastern)).isoformat()
'2014-10-06T18:56:00-04:00'
>>> datetime(2014, 10, 6, 18, tzinfo=utc).astimezone(eastern).isoformat()
'2014-10-06T14:00:00-04:00'
>>> eastern.localize(datetime(2014, 10, 6, 18)).isoformat()
'2014-10-06T18:00:00-04:00'

我想这是你想要的最后一个。正如文档localize所说:

将天真的时间转换为本地时间。

此方法应用于构造本地时间,而不是将tzinfo参数传递给datetime构造函数。

我认为构建本地时间正是您想要的。

如果您想知道 为什么 ……那么,如果您查看一下奥尔森数据库中的数据,或者只是打印出eastern._utcoffset,您将看到-1天,+
68640分钟。那是19.0166+小时,而不是19小时。为什么?因为每个时区都以其起始偏移量进行定义,并从那里进行调整。东部地区基于1883年11月18日纽约时区,当时是格林尼治标准时间-04:56:02。从1920年开始对日期进行了调整,减去了额外的00:03:58。当然,DST的年度调整来回一小时。因此,截至目前,东部地区是-04:00,但不知道它应该代表什么日期,所以是-04:56。而且,因为datetime只要求时区提供其偏移量,而不是在特定时间获取其偏移量,这就是它所得到的。

最后一件事:EST是东部标准时间,它是-05:00。那不是2014年10月6日在美国任何位置的时区,因为在2014年,美国的夏令时为11月2日。(印第安纳州曾经有一些县在夏季在EST上,但现在已经不存在了。)您要查找的是EDT,即东部夏令时,-04:00。或者,当然是ET,它是夏季的EDT,而冬季是EST,这是您通过查找'US/Eastern'或得到的结果'America/New_York'



 类似资料:
  • 问题内容: 我在Postgres的平等问题上遇到了麻烦。 平等的工作方式与我期望的一样,如果在对时区进行归一化之后,如果时间相同,那么它应该为真: 但是,似乎不适用于以下情况: 但是,不平等在我期望他们如何实现的过程中起作用: 我有什么误会吗?如何以与平等相同的方式处理时区来评估平等? 问题答案: 以下是两种评估平等的方法: 在 第一个 将它添加到一个。该 第二 通过使用构建体。 但不要使用。曾经

  • 本文向大家介绍golang时间、时区、格式的使用方法,包括了golang时间、时区、格式的使用方法的使用技巧和注意事项,需要的朋友参考一下 前几天,因为需要实现海外服务端定时停机,涉及到时区的概念。网上搜索了一下,大部分都是谈time.Format中的Layout,非常不成体系,这里就简单总结一下其中的时间初始化、时区转化及格式转换。 开发中,我们对时间的使用是比较多的,其应用场景,按照使用概率,

  • 问题内容: 我想知道WebDriver等待超时和隐式等待超时之间的技术差异。 问题答案: 如文档中所述: 在内部设置将用于所有连续搜索的超时。如果找不到该元素,它将尝试在指定的时间内反复查找该元素。它仅执行此操作,不能强制执行其他任何操作- 它等待元素显示。 ,或者只是您用于特定搜索的一次计时器。它具有更大的可扩展性,意味着您可以将其设置为等待可能需要的任何条件。通常,您可以使用一些预构建的元素来

  • 问题内容: 我需要将日期格式化为特定的字符串。 我使用class使用“ ” 模式格式化日期,它将当前日期返回为 “ ”,但我需要为 “ ”。 下面是使用的编码, 输出 :格式化的字符串: 我需要的格式是在gmt时间之间添加冒号。 因为我正在使用Google日历插入事件,所以它仅接受我提到的必需格式。 问题答案: 您可以改用Joda Time。它具有可以满足您需求的format属性。 链接 最大优点

  • 我是Android开发新手,我正在尝试以下代码: 我明白了: 隐式使用默认语言环境是常见的错误源: 使用字符串。格式(区域设置,…)相反 我不知道如何修改代码以实现建议。

  • 问题内容: 我正在使用Moment.js解析和格式化Web应用程序中的日期。作为JSON对象的一部分,我的后端服务器以UTC纪元(Unix偏移)为单位发送日期(以毫秒为单位)。 在特定时区中 解析日期很容易-只需在解析前将RFC 822时区标识符附加到字符串的末尾即可: 但是,如何格式化 特定时区中 的日期? 无论浏览器的当前时间如何,我都希望获得一致的结果,但是我不想以UTC显示日期。 问题答案