【问题标题】:Converting to_datetime but keeping original time转换 to_datetime 但保持原始时间
【发布时间】:2018-09-07 12:13:11
【问题描述】:

我正在尝试将字符串转换为日期时间,但转换会使原始时间增加 5 小时。如何转换但保持时间不变?

>>> import pandas as pd
>>> t = pd.to_datetime("2016-09-21 08:56:29-05:00", format='%Y-%m-%d %H:%M:%S')
>>> t
Timestamp('2016-09-21 13:56:29')

【问题讨论】:

  • 是时区问题吗?你总是可以减去 5 小时
  • 从您的字符串中删除“-05:00”:t= pd.to_datetime("2016-09-21 08:56:29", format='%Y-%m-%d %H:%M:%S') 返回:Timestamp('2016-09-21 08:56:29')
  • @sacul 你知道为什么会这样吗?只是好奇
  • 你也可以使用 (tz_localize)[pandas.pydata.org/pandas-docs/stable/generated/…
  • 哦,我明白了......

标签: python pandas datetime datetime-format python-datetime


【解决方案1】:

转换不会在原始时间上增加 5 小时。 Pandas 只是检测到您的日期时间是时区感知的,并将其转换为天真的 UTC。但它仍然是同一个日期时间。

如果您想要一个本地化的Timestamp 实例,请使用Timestamp.tz_localize()t 设置为可识别时区的UTC 时间戳,然后使用Timestamp.tz_convert() 方法转换为UTC-0500:

>>> import pandas as pd
>>> import pytz
>>> t = pd.to_datetime("2016-09-21 08:56:29-05:00", format='%Y-%m-%d %H:%M:%S')
>>> t
Timestamp('2016-09-21 13:56:29')
>>> t.tz_localize(pytz.utc).tz_convert(pytz.timezone('America/Chicago'))
Timestamp('2016-09-21 08:56:29-0500', tz='America/Chicago')

【讨论】:

    【解决方案2】:

    要实现您想要的,您可以从时间字符串“2016-09-21 08:56:29-05:00”的末尾删除“-5:00”

    但是,Erik Cederstrand 正确解释了 pandas 不会修改时间,它只是以不同的格式显示它。

    【讨论】:

    • 您确定这是个好主意吗?它会改变时间戳...
    • @holdenweb 我觉得这就是 OP 所要求的。因为他们将 pd.to_datetime 描述为“增加 5 小时”。
    • 这个问题并没有详细说明确切的要求,所以我想你的猜测和我的一样好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2012-11-26
    • 2021-09-23
    • 2012-03-13
    • 1970-01-01
    相关资源
    最近更新 更多