【问题标题】:How to convert datetime into GMT +7 in Python?如何在 Python 中将日期时间转换为 GMT +7?
【发布时间】:2021-02-08 10:43:24
【问题描述】:

我有一个看起来像这样的数据框:

   conversation__created_at
0  2020-10-15T03:39:42.766773+00:00
1  2020-10-14T11:24:33.831177+00:00
2  2020-10-14T08:29:44.192258+00:00
3  2020-10-14T01:42:06.674313+00:00
4  2020-10-13T12:57:04.218184+00:00

如何转换成GMT+7?

【问题讨论】:

    标签: python pandas dataframe datetime


    【解决方案1】:

    我假设您有一个熊猫系列,因为您发布的数据看起来像一个。 然后你可以使用tz_convert,即

    import pandas as pd
    pd.to_datetime('2020-10-15T03:39:42.766773+00:00').tz_convert('Etc/GMT+7')
    

    正如cmets中所指出的,由于datetime带有T,它是字符串格式,因此我们需要先转换为datetime,然后再转换为正确的时区。

    pd.to_datetime(series).dt.tz_convert('Etc/GMT+7')
    

    【讨论】:

    • OP 的输入是 dtype 字符串,因为日期和时间之间仍然存在 'T' 分隔符,因此可能需要 pd.to_datetime ;-)
    • @MrFuppes,感谢您指出这一点。我从来没有注意到T 实际上表示字符串fromat。我更新了我的答案。
    • 哦,还有一个警告; 'Etc/GMT+7' 是 UTC-7(不是 +7)。不确定OP在这里期望什么。如果命名某个时区会更容易。
    • 那么+7(雅加达)的语法是什么?
    • @ab.trubex 有Asia/Jakarta的时区,可以用这个。
    【解决方案2】:

    您只能使用datetime 库。

    from datetime import datetime, timedelta, timezone
    
    d = datetime.fromisoformat("2020-10-15T03:39:42.766773+00:00")
    tz = timezone(timedelta(hours=7))
    new_time = d.astimezone(tz)
    

    【讨论】:

    • 如何在 pandas 中进行协作?我们需要for循环吗?
    • 有了时间列表,可以使用for循环。这个 sn-p 不需要 pandas。
    【解决方案3】:

    您可以在 df 上应用 pytz.timezone

    from pytz import timezone
    from datetime import datetime
    
    def myDate(x): 
      tz = timezone("Etc/GMT+7")
      dt = x.replace(tzinfo=tz)
      return dt
    
    df['conversation__created_at'] = df.apply(lambda row: myDate(row['conversation__created_at'].to_pydatetime()))
    

    【讨论】:

    • 再说一遍,我添加 df = pd.read_csv('filename.csv')
    • 除了这个任务有一个内置的pandas,我认为你不应该在这里建议使用replace。虽然这适用于静态偏移量,但它会导致实际时区的偏移量 (LMT) 错误,请参阅pytz localize vs. replace
    【解决方案4】:

    您可以使用pytz 为您的datetime 实例设置时区

    例如:

    from pytz import timezone
    from datetime import datetime
    
    date = datetime.now()
    
    print(date)
    tz = timezone("Etc/GMT+7")
    date = date.replace(tzinfo=tz)
    print(date)
    

    输出:

    2020-10-26 10:33:25.934699
    2020-10-26 10:33:25.934699-07:00
    

    【讨论】:

      猜你喜欢
      • 2011-10-09
      • 2019-03-17
      • 2020-04-15
      • 2018-04-13
      • 2016-11-12
      • 2019-01-27
      • 1970-01-01
      • 2021-05-02
      • 2012-02-15
      相关资源
      最近更新 更多