Возвращаясь к некоторым моим заметкам, я обнаружил следующее:
import numpy
dt64 = numpy.datetime64( "2011-11-11 14:23:56" )
# dt64 is internally just some sort of int
# it has no fields, and very little support in numpy
import datetime, time
dtdt = dt64.astype(datetime.datetime) # <<<<<<<< use this!
dtdt.year
dtdt.month
dtdt.day
# to convert back:
dt64 = np.datetime64(dtdt) # <<<<<<<< use this too!
dt64.item().strftime("%Y%b%d")
Модули datetime и time - это обычные модули Python: они работают разумнону, есть много полей, преобразований и поддержки.
datetime64 - это не полностью реализованный подтип, встроенный в numpy .Это просто 64-битный тип int (?) (Возможно, с 1970 года?). datetime64 - это нечто совершенно отличное от datetime.datetime .Если вы конвертируете datetime64 в число с плавающей запятой и обратно, вы теряете много точности (бит) - отсюда и ошибки.
Модуль (не является частью numpy) datetime также может делать такие вещи, как:
# timedelta()
delta = datetime.timedelta(days=11, hours=10, minutes=9, seconds=8)
delta # datetime.timedelta(11, 36548) # (days,seconds)
delta.days
delta.seconds
delta.microseconds
delta.total_seconds() # 986948.0
# arithmetic: +-*/
# 2 timedelta's
# timedelta and datetime
now = datetime.datetime.now()
christmas = datetime.datetime(2019,12,25)
delta = christmas - now
Так что пусть numpy иногда сохраняет ваши данные даты как datetime64, но я бы порекомендовал not- numpy модуль datetime для работы с datetime-арифметикой.