如何在 Python 中将日期时间转换为 GMT +7?

Posted

技术标签:

【中文标题】如何在 Python 中将日期时间转换为 GMT +7?【英文标题】:How to convert datetime into GMT +7 in Python? 【发布时间】: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?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何在 Python 中将日期时间转换为 GMT +7?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中将本地时间转换为 GMT 时区

如何编写一个正则表达式命令在 python 中将字符串转换为日期时间格式?

在 Swift 中将日期从 GMT+1 转换为 UTC 时的困惑

在javascript中将日期从“Thu Jun 09 2011 00:00:00 GMT+0530(印度标准时间)”转换为“YYYY-MM-DD”

如何在 Go 中将时间戳格式化为 GMT?

如何在freemarker中将日期转换为字符串?