как добавить сотую секунду в datetime? - PullRequest
0 голосов
/ 21 февраля 2019

(новичок ..., работа с Jupyter Notebook)

У меня есть некоторые данные от инструмента, где дата и время представлены в 7 разделенных переменных (SerYear, SerMon, SerDay, SerHour, SerMin, SerSec,SerHund, все целые числа).'Ser' для 'Series', а 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

Итак ... Iдумал, что если я умножу SerHund на 10000, я получу правильные значения (29,61 секунды), однако, я получу

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

Мой 1-й вопрос: как мне добавить сотую секунду в дате?

и 2-й: почему умножение на 10e4 не работает?

Спасибо

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Это дает вам, как получить часть секунды.

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)
0 голосов
/ 26 февраля 2019

Это не ответ, скорее решение моей проблемы.Нужно использовать 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

Я был бы очень признателен за помощь, чтобы понять, что происходит ... спасибо.

0 голосов
/ 21 февраля 2019

10e4 слишком много ... и float:

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

Ваш код работает, если вы используете *10000 (или int( ... *1e4) (чтобы обойти 1e4, будучи float):

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(...) it:

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

Вывод:

2019-02-06 09:35:29.610000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...