如何在 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 中将字符串转换为日期时间格式?
在 Swift 中将日期从 GMT+1 转换为 UTC 时的困惑
在javascript中将日期从“Thu Jun 09 2011 00:00:00 GMT+0530(印度标准时间)”转换为“YYYY-MM-DD”