Я использую удивительный пакет nanotime
для хранения своих драгоценных временных меток. Учтите это:
library(tibble)
library(nanotime)
tibble(mytimestamp = c(nanotime('2011-12-05 08:30:00.000',format ="%Y-%m-%d %H:%M:%E9S", tz ="GMT"),
nanotime('2011-12-05 08:30:00.100',format ="%Y-%m-%d %H:%M:%E9S", tz ="GMT"),
nanotime('2011-12-05 08:30:00.825',format ="%Y-%m-%d %H:%M:%E9S", tz ="GMT")))
# A tibble: 3 x 1
mytimestamp
<S4: nanotime>
1 2011-12-05T08:30:00.000000000+00:00
2 2011-12-05T08:30:00.100000000+00:00
3 2011-12-05T08:30:00.825000000+00:00
Однако я не знаю, каков правильный синтаксис для
- извлеките миллисекундную часть из моих временных отметок
- округлить до ближайшей секунды (как
lubridate::floor_date(., '1 seconds')
)
- преобразовать в другой часовой пояс (скажем,
'US/Eastern'
)
Должен ли я использовать другой пакет для этих вещей? Например, использование lubridate
приведет к потере точности в миллисекундах (обратите внимание на .0999 вместо .100)
mydf %>%
mutate(lubritime = lubridate::as_datetime(mytimestamp))
# A tibble: 3 x 2
mytimestamp lubritime
<S4: nanotime> <dttm>
1 2011-12-05T08:30:00.000000000+00:00 2011-12-05 08:30:00.00000
2 2011-12-05T08:30:00.100000000+00:00 2011-12-05 08:30:00.09999
3 2011-12-05T08:30:00.825000000+00:00 2011-12-05 08:30:00.82500
Аналогично, прямое преобразование в EST
не допускается
> mydf %>%
+ mutate(mytimestamp_EST = lubridate::with_tz(mytimestamp, 'US/Eastern'))
Error in UseMethod("reclass_date", orig) :
no applicable method for 'reclass_date' applied to an object of class "c('nanotime', 'integer64', 'oldClass')"
Спасибо!