Python箭头没有正确格式化日期

时间:2017-05-16 16:02:24

标签: python datetime python-arrow

我正在使用Python Arrow包格式化我已经拥有的日期。

我的意见是:

datetime=2017-10-01T00:10:00Z and timezone=US/Pacific

我的预期输出是:

Sun 10/01 @ 6:10pm

我尝试了许多不同的日期时间转换,但我总是以Sun 10/01 @ 12:10AM结束,这与时区无关。

如果我试着说:

x = arrow.Arrow.strptime('2017-10-01T00:10:00Z', 
                         '%Y-%m-%dT%H:%M:%SZ',
                         tzinfo=tz.gettz('US/Pacific'))

x等于:

<Arrow [2017-10-01T00:10:00-07:00]>
然后我说:

x.strftime('%a %m/%d @ %I:%M%p')

并输出

Sun 10/01 @ 12:10AM

Arrow对象知道-7:00所证明的时区,但没有相应地格式化日期。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我认为这个问题存在一些误解。

转换为时区

我看不出时间戳,

2017-10-01T00:10:00Z and timezone=US/Pacific

可以成为,

Sun 10/01 @ 6:10pm

这里有几个问题。

  1. 时间戳末尾的Z是时区,表示Zulu也称为GMT,因此时间戳已经有时区。
  2. 如果我们忽略问题#1,那么对于那个时间戳午夜后10分钟(减去Z)到下午6:10,同一天将需要+18的时区。此时区不存在。
  3. 美国/太平洋地区为-7 / -8,视一年中的时间而定。如果我们接受Z作为时区并希望转换为美国/太平洋,那么时间应该是9/31 at 5:10 pm
  4. -7:00是什么意思?

    所以我猜你的意思是时间戳实际上是祖鲁语,而你希望将时间戳显示为美国/太平洋。如果这是真的,那么你需要这样做:

    from dateutil import tz
    import arrow
    x = arrow.Arrow.strptime(
        '2017-10-01T00:10:00Z',
        '%Y-%m-%dT%H:%M:%SZ').to(tz.gettz('US/Pacific'))
    
    print(x)
    print(x.strftime('%a %m/%d @ %I:%M%p'))
    

    这导致:

    2017-09-30T17:10:00-07:00
    Sat 09/30 @ 05:10PM
    

    如前所述,您会注意到这些产生的时间相同。不同的是,第一个也有-7:00。这并不表示,正如您在问题中暗示的那样,时间需要移除7个小时以显示在时区中,而是表示时间戳已经从祖鲁语中删除了7个小时。