如何从时区字符串列中获取时区字符串?

Posted

技术标签:

【中文标题】如何从时区字符串列中获取时区字符串?【英文标题】:How to get timezone strings from timezone string columns? 【发布时间】:2021-07-14 17:48:52 【问题描述】:

1 我有一个 CSV,其中包含 GMT 时区字符串的列 data["timestamps1"],格式如下:

2020-02-28T12:53:47.167Z

2 我想在另一个 tz 时间(欧洲/柏林)中获取一个包含时区字符串的新列,格式并不重要,例如

2020-02-28 13:53:47

我该怎么做?我已经尝试过解析日期

import pandas as pd
from datetime import datetime
from pytz import timezone
path = "timestamps.csv"                           
data = pd.read_csv(path, sep=";", parse_dates= ["timestamps1"])

data['timestamps1_new'] = data['timestamps1'].dt.tz_localize('GMT').dt.tz_convert('Europe/Berlin')

然后我得到错误 “已经 tz-aware,使用 tz_convert 进行转换。” 当我不解析日期时,我得到 “只能将 .dt 访问器与 datetimelike 值一起使用”。即使我以这种方式操作字符串,也会发生错误:

data["timestamps1"] = data["timestamps1"].str[:-5]
data["timestamps1"] = data.timestamps1.replace("T"," ",regex=True)

以下是一些示例数据:

data = 'timestamps': ['2020-11-28T13:14:57.463Z','2020-11-28T13:14:57.603Z','2020-11-28T13:14:57.618Z']
data = pd.DataFrame(data=data)

非常感谢!

【问题讨论】:

您的格式 2020-02-28T12:53:47.167Z (ISO8601) 会自动解析为可感知的日期时间(tzinfo 集,UTC)。所以你只需要转换:data['timestamps1_new'] = data['timestamps1'].dt.tz_convert('Europe/Berlin') 【参考方案1】:

pandas 解析 ISO 8601 格式,Z 直接表示 UTC 以感知日期时间(它“知道”它在 UTC...):

import pandas as pd

data = 'timestamps': ['2020-11-28T13:14:57.463Z','2020-11-28T13:14:57.603Z','2020-11-28T13:14:57.618Z']
data = pd.DataFrame(data=data)

# you skip this step by setting 'parse_dates' in read_csv
data['timestamps'] = pd.to_datetime(data['timestamps'])

print(data['timestamps'])
0   2020-11-28 13:14:57.463000+00:00
1   2020-11-28 13:14:57.603000+00:00
2   2020-11-28 13:14:57.618000+00:00
Name: timestamps, dtype: datetime64[ns, UTC]

所以可以直接转换:

data['timeGermany'] = data['timestamps'].dt.tz_convert('Europe/Berlin')

print(data['timeGermany'])
0   2020-11-28 14:14:57.463000+01:00
1   2020-11-28 14:14:57.603000+01:00
2   2020-11-28 14:14:57.618000+01:00
Name: timeGermany, dtype: datetime64[ns, Europe/Berlin]

【讨论】:

原来如此,我明白了,非常感谢!

以上是关于如何从时区字符串列中获取时区字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何从安卓手机获取时区?

如何从 ISO 8061 字符串日期时间派生以获取 Python3 中的时区名称? [复制]

在不使用字符串的情况下在 javascript 中获取另一个时区的时区偏移量

javascript 从Date对象获取相同的日期字符串,无论服务器的时区如何。

如何获取 Google 电子表格时区偏移字符串而不是时区字符串?

使用 DST 设置获取 JavaScript 时区字符串