удалите миллисекунды из даты-времени в формате TZ

#r #datetime #time #milliseconds

Вопрос:

У меня есть столбец даты и времени, содержащий дату и время в формате TZ, например:

метка времени = 2021-04-01T04:37:16.528 Z

Я должен преобразовать/усечь часть миллисекунд таким образом, чтобы дата и время были:

 
as.POSIXct(timestamp, format="%Y-%m-%dT%H:%M:%OSZ", tz="GMT")

2021-04-01 04:37:16
 

Но когда я группирую данные по столбцу времени для агрегирования, он по-прежнему использует метку времени в формате миллисекунд, и агрегирование не реализовано должным образом.

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

Ответ №1:

Вы можете удалить часть миллисекунд из строки, а затем преобразовать:

 as.POSIXct(gsub("\.[0-9] Z", "", timestamp), 
           format="%Y-%m-%dT%H:%M:%S", tz="GMT")
 

Комментарии:

1. Почему бы вам не отбросить их, вместо того чтобы округлять в большую или меньшую сторону до секунд?

2. уменьшение миллисекунд не изменит секунды, но округление будет (например, 12:12:12,899 будет округлено до 12:12:13). в этом случае агрегирование будет неправильным