【问题标题】:date-time-string to UNIX time with millisecondsdate-time-string 到 UNIX 时间,以毫秒为单位
【发布时间】:2018-02-07 10:14:36
【问题描述】:

我需要将日期/时间字符串转换为 UNIX 时间戳,包括毫秒。由于 timetuple() 不包括毫秒或微秒,我做了一个简短的解决方法。但我想知道,有没有更好/更好的方法来做到这一点?

import datetime as dt
import time

timestamp = '2018-01-19 10:00:00.019'  # example of input time string 
tmp       = timestamp.split('.')
millisec  = tmp[-1]                    # extracting only milli-seconds
UX_time = time.mktime(dt.datetime.strptime(tmp[0], '%Y-%m-%d %H:%M:%S').timetuple()) + float(millisec)/1e3

print(UX_time)

1516352400.019

我意识到我的时区差一小时,所以你可能会得到

print(UX_time)

1516356000.019

【问题讨论】:

  • @slashcool 我的原始代码是 time.mktime(dt.datetime.strptime(tmp[0], '%Y-%m-%d %H:%M:%S.%f' ).timetuple()) 当我注意到 timetuple() 确实切断了微秒。这就是这个变化的原因。

标签: python-3.x datetime unix-timestamp


【解决方案1】:

你可以试试这个:

timestamp = '2018-01-19 10:00:00.019' 
tmp=np.datetime64(timestamp)
print(tmp.view('<i8')/1e3)

输出:

1516352400.019

【讨论】:

  • 以前不知道 numpy.datetime64()。谢谢,它正在做我需要做的事情。
【解决方案2】:

也可以使用您当前的代码:

import datetime as dt
import time

timestamp = '2018-01-19 10:00:00.019'  # example of input time string 
ts = dt.datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S.%f')
UX_time = time.mktime(ts.timetuple()) + ts.microsecond/1e6

print "%.3f" %UX_time

【讨论】:

  • 我喜欢阶梯,它比我的代码短。但与@riccardo nizzolo 的代码相比,它有点慢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
相关资源
最近更新 更多