以秒为单位的转换时间戳值不会反转为 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 中的普通时间戳(以秒为单位)
输出以秒为单位。在 php 中转换为 hh:mm:ss 格式