为啥将纪元时间转换错误?啥是正确和最快的方法?

Posted

技术标签:

【中文标题】为啥将纪元时间转换错误?啥是正确和最快的方法?【英文标题】:Why getting epoch time conversion wrong? What is the right and quickest way?为什么将纪元时间转换错误?什么是正确和最快的方法? 【发布时间】:2019-01-10 13:31:12 【问题描述】:

我的目标:以最快的方式转换这个时间戳

'timestamp': 1533203940000, 'open': 564.1, 'high': 567.55, 'low': 563.4, 'close': 564.45, 'volume': 522096, 'cp': 564.45

进入“2018-08-02 15:29:00”(这是我应该得到的)

但是,我没有让它正确转换。时间是错误的。 也许这与时区有关?我试过....

n=np.array([1533203940]).astype('datetime64[s]')

我明白了:

['2018-08-02T09:59:00']

然后……

time.gmtime(1533203940)

也是错的……

time.struct_time(tm_year=2018, tm_mon=8, tm_mday=2, tm_hour=9, 
tm_min=59, tm_sec=0, tm_wday=3, tm_yday=214, tm_isdst=0)

熊猫也不对。

pd.to_datetime(1533203940,unit='s')

它给了....

2018-08-02 09:59:00

只有日期时间才能正确!!!

datetime.fromtimestamp(1533203940)

这给了..

2018-08-02 15:29:00

其他人哪里出错了?如果没有答案,我可能会弄错我未来的计算,甚至可能没有意识到:(

【问题讨论】:

【参考方案1】:

看来你需要这样的东西

df['timestamp'] = pd.to_datetime(df['timestamp'], unit= 'ms').dt.tz_localize('utc') \
    .dt.tz_convert(tz='USE YOUR TIME ZONE HERE').apply \
    (lambda x: datetime.replace(x, tzinfo=None))

【讨论】:

嘿,感谢您的回复,但我遇到了一些错误,我尝试了这个:df = pd.to_datetime(t, unit= 'ms').tz_localize('UTC').tz_convert('Asia /加尔各答') ***.com/questions/42826388/… 另一种方法是执行 pd.DateOffset(hours=5,minutes=30) 以到达所需的时区。

以上是关于为啥将纪元时间转换错误?啥是正确和最快的方法?的主要内容,如果未能解决你的问题,请参考以下文章

将纪元转换为时间戳时获取不正确的日期

从纪元到日期时间的转换不正确

将 UTC 纪元转换为本地日期

在 Java 中获取 nanos unix 纪元时间的最快方法

错误的时间转换为纪元时间

如何在 Perl 中将纪元时间转换为正常时间?