python - 将自纪元以来的时间字符串存储到 μ 中

标签 python python-3.x datetime calendar

我正在尝试将 datetime.time 字符串转换为等于 python 中的总微秒数的整数。

# my input
>>> mark_raw = '00:01:00.420000' # 0 hr, 1 min, 0 sec, 42 ms

# my desired output
>>> mark_time 
60420000

我当前的计划找到自纪元以来的日期时间和自纪元以来的日期之间的差异

# 0 hr, 1 min, 0 sec, 42 ms
>>> mark_raw = '00:01:00.420000'
>>> mark_dt = datetime.strptime(mark_raw, '%H:%M:%S.%f')

>>> mark_dt
datetime.datetime(1900, 1, 1, 0, 1, 0, 420000)

>>> mark_date  = mark_dt.date()
>>> mark_date
datetime.date(1900, 1, 1)

>>> dt_epoch = calendar.timegm(mark_dt.timetuple()) * 1000
>>> dt_epoch
-2208988740000

>>> date_epoch = calendar.timegm(mark_date.timetuple())  * 1000
>>> date_epoch
-2208988800000

>>> mark_time = dt_epoch - date_epoch
>>> mark_time
60000

不确定为什么我会得到 60000 微秒。也许是四舍五入的问题?我假设 datetime.date(1900, 1, 1) 等于 datetime.date(1900, 1, 1, 0, 0, 0, 0) 但也许是这样事实并非如此。

唯一的要求是将原始时间字符串获取到微秒,对任何其他策略开放,并且感谢任何帮助!

最佳答案

不匹配的原因是,

>>> mark_dt.timetuple()
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=1, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)
>>> mark_date.timetuple()
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)

您可以在这里看到差异! mark_dt.timetuple() 中的 tm_min=1mark_date.timetuple() 中的 tm_min=0

并且,

dt_epoch = calendar.timegm(mark_dt.timetuple()) 
print dt_epoch

date_epoch = calendar.timegm(mark_date.timetuple())  
print date_epoch

mark_time = dt_epoch - date_epoch
print mark_time

将打印

-2208988740
-2208988800
60

从而体现出tm_min = 1和0时两个结果的差异!

获取微秒

并且,如果您想获取微秒,请获取纪元的时间增量,找到总秒数,然后将其乘以 10^-6 即 1e6

# 0 hr, 1 min, 0 sec, 42 ms
import datetime
import calendar
mark_raw = '00:01:00.420000'
mark_dt = datetime.datetime.strptime(mark_raw, '%H:%M:%S.%f')

mark_date = mark_dt.date()
epoch_datetime=datetime.datetime(
    year=mark_date.year, 
    month=mark_date.month,
    day=mark_date.day,
)
print (mark_dt - epoch_datetime).total_seconds()*(1000000) 
#print (mark_dt - epoch_datetime).total_seconds()*ie6

输出:

60420000.0

希望对你有帮助!

关于python - 将自纪元以来的时间字符串存储到 μ 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43042184/

相关文章:

python - 在某些条件下分割数据框

python - 环境 python 脚本,需要使用以前运行的结果

python - 如何使用Python远程读取和写入HDFS?

c# - 如何在 C# 中生成上午 12 点到下午 6 点之间的随机时间?

c# - 如何将一段时间分组为年度? (将时间跨度分成年度)

python - 将程序作为字符串传递给 Python 时使用导入和 for 循环

python - Pandas 中的分组和列差异计算

python - Python 3.x 中的日志记录错误 : TypeError: a bytes-like object is required, 而不是 'str'

python - 为什么较大的 int 数字会返回不同的 ID,有时会返回相同的 ID?

python - 获取 DataFrame 的 Datetime 列的工作日/星期几