如何在日期时间增加百分之一秒?

时间:2019-02-21 18:16:52

标签: python python-3.x datetime

(新手...,正在使用Jupyter Notebook)

我从仪器中获得了一些数据,其中日期和时间来自7个独立的变量(SerYear,SerMon,SerDay,SerHour,SerMin,SerSec,SerHund,所有整数)。 “系列”的“ Ser”,Hund是百分之一秒

我使用以下代码“汇编”日期时间(年,月和日为常数,没有SerHund,np = numpy)。它可以工作(可以用更好的方法吗?)

time_adcp=[]

for i in range(len(SerHour)):
    c_time = datetime.datetime(Year,Month,Day,SerHour[i],SerMin[i],SerSec[i])
    time_adcp = np.append(time_adcp,c_time)

仅将SerHund作为下一个变量,它被理解为“微秒”。 SerHund的第一个值为61,所以得出的结果是

time_adcp=[]

for i in range(len(SerHour)):
    c_time = datetime.datetime(Year,Month,Day,SerHour[i],SerMin[i],SerSec[i],SerHund[i])
    time_adcp = np.append(time_adcp,c_time)

print(SerSec[0],SerHund[0],time_adcp[0])  # to check out...`

[29] [61] 2019-02-06 09:35:29.000061

所以...我想,如果将SerHund乘以10,000,我会得到正确的值(29.61秒),但是,我得到的是

[29] [61] 2019-02-06 09:35:29.020176

我的第一个问题是:如何在日期时间中加上百分之一秒?

和第二个:为什么乘以10e4无效?

谢谢

3 个答案:

答案 0 :(得分:0)

10e4太多了……还有float

print(1e4)  # 10000.0
print(10e4) # 100000.0

如果您使用*10000(或int( ... *1e4)(以规避1e4float),则您的代码有效:

Year,Month,Day,SerHour,SerMin,SerSec,SerHund=2019,2,6,9,35,29,61

import datetime
dt = datetime.datetime(Year,Month,Day,SerHour,SerMin,SerSec,SerHund)
print(dt)
dt = datetime.datetime(Year,Month,Day,SerHour,SerMin,SerSec,SerHund*10000)
print(dt)

输出:

2019-02-06 09:35:29.000061
2019-02-06 09:35:29.610000

1e4可以使用int(...)

dt = datetime.datetime(Year,Month,Day,SerHour,SerMin,SerSec,int(SerHund*1e4))
print(dt)

输出:

2019-02-06 09:35:29.610000

答案 1 :(得分:0)

这为您提供了一秒钟的时间。

import datetime
from time import strftime
n = datetime.datetime.now()
m = float(n.strftime("%S.%f"))
o = int(m)
p= m-o
q=round(p*100)/100
print(n,q)

这为您提供了如何添加部分-最简单的方法:

from datetime import timedelta
d = timedelta(microseconds=10) #(1000ms = 1 sec => 1/100th sec = 10ms)
d2 = n + d
print(d2)

答案 2 :(得分:0)

这不是答案,而是针对我的问题的解决方案。必须对包含“百分之一秒”的变量使用int(),否则,将给我错误的结果。

time_adcp=[]

for i in range(len(SerHour)):
    c_time = datetime.datetime(Year[i],Month[i],Day[i],Hour[i],Min[i],Sec[i],int(Hund[i])*10000)
    time_adcp = np.append(time_adcp,c_time)

但是,我不明白为什么我不需要对来自同一文件的其他变量使用int()。而且,更重要的是,那是什么错误的结果?

从一开始:

1)我加载了一个结构'.mat'文件,该文件最初是由Matlab以外的其他公司导出的。我用

import scipy.io as sio

d_adcp = sio.loadmat('file_adcp.mat')

我从d_adcp分离了日期和时间变量

Year = d_adcp['SerYear']
Month = d_adcp['SerMon']
Day = d_adcp['SerDay']
Hour = d_adcp['SerHour']
Min = d_adcp['SerMin']
Sec = d_adcp['SerSec']
Hund = d_adcp['SerHund']

现在,这些是什么样的变量?它们看起来像整数

print(Year[0],Month[0],Day[0],Hour[0],Min[0],Sec[0],Hund[0])
[19] [2] [6] [9] [35] [29] [61]

验证,它们不是整数

isinstance(Year,int)
False 

都不浮动!?

isinstance(Year,float)
False

据我所知,datetime仅接受整数。那么,为什么起初它会起作用,甚至给我错误的结果呢?为何我只需要为int()使用Hund

我将非常感谢您提供一些帮助,以了解发生了什么...谢谢。