【问题标题】:Converting string timestamp to Python datetime (was: how to properly convert char into float or double in Python)将字符串时间戳转换为 Python 日期时间(是:如何在 Python 中正确地将 char 转换为 float 或 double)
【发布时间】:2023-04-08 16:15:01
【问题描述】:

这里我有这样的字符串"1322485986.672901000",数据类型是代表unixtime的字符串。我想在 Python 中将其转换为日期时间。

我使用的方式是date = datetime.fromtimestamp(float(row[0])) row[0] 代表这样的值1322485986.672901000,因为我有几行。转换结果是错误的,它只计算点之前的数字。所以转换后的日期就像 2011-11-28 13:53:23.6729

我认为问题是float(row[0]),但我不知道如何解决这个问题,或者有谁知道如何以更好的方式将unixtime转换为datetime?

非常感谢!

现在我得到的结果是 2011-11-28 14:13:06.672901

但是使用在线转换器时,结果是2011-11-28 13:13:06

【问题讨论】:

  • 正确的结果是什么?
  • 因为这个结果保持 .原始字符串中的 6729,这意味着它只使用前 10 位来计算日期时间。正确的结果是 yyyy-mm-dd hh:mm:ss
  • 对我来说很合适。您似乎在几秒钟内丢失了少量精度(.672901000 到 .6729),但即使这样也可能只是输出格式。
  • 所以你想忽略小数部分?你很不清楚,请发布你想要的确切结果。
  • 小数点前的部分是unix epoch中的秒;小数点后的部分是几分之一秒。如果要查看 yyyy-mm-dd hh:mm:ss,请使用int(float(row[0]))

标签: python datetime unix-timestamp


【解决方案1】:

您当前结果的一小时差异可能是时区应用的结果。

如果需要,您可以提供明确的时区——tzinfo objects 上的文档可以引导您直接创建时区对象,一旦创建,您只需传入参数:

from datetime import datetime, tzinfo, timedelta

timestamp = "1322485986.672901000"

class UTC(tzinfo):
    def utcoffset(self, dt):
         return timedelta(0)
    def tzname(self, dt):
        return "UTC"
    def dst(self, dt):
        return timedelta(0)


d1 = datetime.fromtimestamp(float(timestamp), UTC())
print d1

此代码为我打印 2011-11-28 13:13:06.672901+00:00。

【讨论】:

  • 补充一点,如果你想从 unix 时间戳生成 UTC 时间,你可以简单地使用 datetime.utcfromtimestamp(float(timestamp))。
【解决方案2】:
from datetime import datetime

timestamp = "1322485986.672901000"

d1 = datetime.fromtimestamp( float(timestamp) )
print d1

d2 = datetime.fromtimestamp( int(float(timestamp) ) )
print d2

产量:

2011-11-28 05:13:06.672901
2011-11-28 05:13:06

【讨论】:

    【解决方案3】:
    # timestamp to time tuple in UTC
        timestamp = 1226527167.595983
        time_tuple = time.gmtime(timestamp)
        print repr(time_tuple)
    
    # timestamp to time tuple in local time
        timestamp = 1226527167.595983
        time_tuple = time.localtime(timestamp)
        print repr(time_tuple)
    

    【讨论】:

      猜你喜欢
      • 2016-09-15
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 2014-10-07
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多