以秒为单位的转换时间戳值不会反转为 python 中的原始时间戳

Posted

技术标签:

【中文标题】以秒为单位的转换时间戳值不会反转为 python 中的原始时间戳【英文标题】:Converted timestamp value in seconds is not reversing to original timestamp in python 【发布时间】:2020-10-11 20:54:43 【问题描述】:

我有一个字符串时间戳。我想将其转换为秒,然后再将其转换为时间戳。因此,为此,我首先将字符串转换为时间戳,然后计算秒数。我再次将那几秒转换为时间戳。

但转换后的时间戳与原始时间戳不匹配。我该如何解决这个问题?

我使用以下代码进行此转换:

import datetime
import pandas as pd


def string_to_datetime(string):
    dv = [string]

    dv_series = pd.Series(dv)
    dv_to_datetime = pd.to_datetime(dv_series)
    dv_to_datetime_list = list(dv_to_datetime)

    return dv_to_datetime_list[0]


timestamp = ['2020-06-12T08:33:14']

timestamp = string_to_datetime(timestamp[0])
print('timestamp:')
print(timestamp)

timestamp_in_seconds = float((timestamp - datetime.datetime(1970, 1, 1)).total_seconds())

print('timestamp in seconds:')
print(timestamp_in_seconds)

print('Again converted to timestamp:')
print(datetime.datetime.fromtimestamp(timestamp_in_seconds))

以上代码的输出如下:

timestamp:
2020-06-12 08:33:14
timestamp in seconds:
1591950794.0
Again converted to timestamp:
2020-06-12 14:33:14

【问题讨论】:

fromtimestamp() 可能假设一个 UTC 纪元并根据您当前的时区进行调整。 我觉得你需要print(datetime.datetime.utcfromtimestamp(timestamp_in_seconds)) 看看datetime docs,重点关注naive时区感知。与pandas datetime 相比,Python 的 datetime 具有(有时令人困惑)默认假设 local time 的属性(naive datetime 情况)。如果未定义时区/UTC 偏移量,则 pandas 假定为 UTC。 【参考方案1】:

我有两个解决方案。也许以后会对某人有所帮助。

solution_1 = datetime.datetime.fromtimestamp(timestamp_in_seconds, tz=pytz.UTC)


solution_2 = datetime.datetime.utcfromtimestamp(timestamp_in_seconds)

时区信息在转换回原始时间戳期间很重要。

【讨论】:

Python 的日期时间将默认假定您需要 本地时间。虽然您的解决方案_1 是正确的,但另一个实际上是错误的,但 显示 您的期望。 Don't use utcfromtimestamp,这只是令人困惑。更好地使用例如datetime.datetime.fromtimestamp(timestamp_in_seconds, tz=datetime.timezone.utc).

以上是关于以秒为单位的转换时间戳值不会反转为 python 中的原始时间戳的主要内容,如果未能解决你的问题,请参考以下文章

将 unix_timestamp 转换为 spark 中的普通时间戳(以秒为单位)

如何在 Swift3 中以秒为单位将字符串更改为分钟?

输出以秒为单位。在 php 中转换为 hh:mm:ss 格式

以秒为单位获取 UTC 时间

Javascript 日增量(以秒为单位)在下午 5:00 翻转

从 Avro 将 unix 时间戳(以秒为单位)导入 Bigquery 中的正确时间戳