python pandas TimeStamps到夏令时的本地时间字符串
Posted
技术标签:
【中文标题】python pandas TimeStamps到夏令时的本地时间字符串【英文标题】:python pandas TimeStamps to local time string with daylight saving 【发布时间】:2015-06-03 20:26:43 【问题描述】:我有一个带有 TimeStamps 列的数据框。我想将其转换为本地时间字符串,即夏令时。
所以我想将下面的 ts[0] 转换为“2015-03-30 03:55:05”。 Pandas 似乎知道 DST,但仅当您在系列上调用 .values 时。
谢谢
(Pdb) ts = df['TimeStamps']
(Pdb) ts
0 2015-03-30 02:55:05.993000
1 2015-03-30 03:10:20.937000
2 2015-03-30 10:09:19.947000
Name: TimeStamps, dtype: datetime64[ns]
(Pdb) ts[0]
Timestamp('2015-03-30 02:55:05.993000')
(Pdb) ts.values
array(['2015-03-30T03:55:05.993000000+0100',
'2015-03-30T04:10:20.937000000+0100',
'2015-03-30T11:09:19.947000000+0100'], dtype='datetime64[ns]')
【问题讨论】:
您的本地时区是什么(例如,Europe/London
)? 2015-03-30 是否有夏令时过渡?
嗨,是的,DST 于 2015 年 3 月 29 日开始。 UTC 中的时间戳是正确的,但我找不到在伦敦时间将其显示为字符串的方法。 @Alexander 明白了。
相关:Converting timezones from pandas Timestamps
【参考方案1】:
DST 与您所在的位置相关(例如,伦敦 DST 比纽约晚几周开始)。您首先需要知道时间戳时区:
from pytz import UTC
from pytz import timezone
import datetime as dt
ts = pd.Timestamp(datetime.datetime(2015, 3, 31, 15, 47, 25, 901597))
# or...
ts = pd.Timestamp('2015-03-31 15:47:25.901597')
# ts is a Timestamp, but it has no idea where in the world it is...
>>> ts.tzinfo is None
True
# So the timestamp needs to be localized. Assuming it was originally a UTC timestamp, it can be localized to UTC.
ts_utc = ts.tz_localize(UTC)
# Once localized, it can be expressed in other timezone regions, e.g.:
eastern = pytz.timezone('US/Eastern')
ts_eastern = ts_utc.astimezone(eastern)
# And to convert it to an ISO string of local time (e.g. eastern):
>>> ts_eastern.isoformat()
'2015-03-30T08:09:27.143173-04:00'
请参阅pytz 或datetime 了解更多信息。
【讨论】:
如果dt
是datetime
模块,则在此处使用utcnow()
而不是now()
。
当然,但重点是展示如何将本地时间戳转换为 UTC('now' 实例只是一个示例)。除了显示时,始终以 UTC 时间处理被认为是最佳做法。
欧洲/伦敦时区!= UTC!!!不要使用 .now()
(以 local 时区返回时间),那么您的意思是 .utcnow()
(以 UTC 时间返回)!
从未说过它们是,但我更新了示例以阐明步骤。
是否明白在这种特殊情况下使用.now()
代替.utcnow()
相当于说Europe/London
== UTC
? (OP 的本地时区是欧洲/伦敦)。以上是关于python pandas TimeStamps到夏令时的本地时间字符串的主要内容,如果未能解决你的问题,请参考以下文章
将 datetime.date 的表示形式转换为 pandas.Timestamp 的表示形式
如何将 TIMESTAMPS 格式转换为与 Impala 兼容
Wireshark tcp包里的timestamps为啥会没有????