Я пытаюсь использовать Matlab для создания строки, которая содержит временную метку Unix в наносекундах (т.е. наносекунды с 01 января 1970 г. 00:00:00, Unix эпоха ) из строка даты ввода.
Например, если мой ввод составляет всего 1 нс после начала эпохи, то работает следующий код:
t0 = datetime('01-Jan-1970 00:00:00.000000000','Format','dd-MMM-yyyy HH:mm:ss.SSSSSSSSS');
t1 = datetime('01-Jan-1970 00:00:00.000000001','Format','dd-MMM-yyyy HH:mm:ss.SSSSSSSSS');
dt_ns = seconds(t1 - t0)*1e9
dt_ns_string = sprintf('%.0f',dt_ns)
dt_ns_string =
'1'
и у меня точность наносекунд Мне нужно.
Однако, если я вместо t1
использую дату примерно сегодня:
t1 = datetime('16-Jun-2020 00:00:00.000000001','Format','dd-MMM-yyyy HH:mm:ss.SSSSSSSSS');
, то результат будет следующим:
dt_ns_string =
'1592265600000000000'
и Я потерял последнюю наносекунду с точностью до конца строки (последний символ должен быть «1»).
Как я могу решить эту проблему?
EDIT
Как было предложено в комментариях, существует также функция Matlab posixtime()
, которая устраняет необходимость вручную вычитать дату и время, соответствующие 01 января 1970 года. Однако это приводит к той же проблеме:
dt_ns_posix = posixtime(t1)*1e9
sprintf('%.0f',dt_ns_posix)
'1592265600000000000'