POSIXct удаляет секунды из 12-часовой временной метки

#r #timestamp #posixct

#r #временная метка #posixct

Вопрос:

Я пытаюсь преобразовать 12-часовую временную метку в объект POSIXct в R. По какой-то причине он удаляет секунды после преобразования.

 ## timestamp
chk = '17-MAY-16 04.51.34.000000000 PM'

## convert
as.POSIXct(chk, format = '%d-%b-%y %I.%M.%S.%OS %p', tz = 'America/New_York')
[1] "2016-05-17 16:51:00 EDT"
  

Я что-то делаю неправильно?

Ответ №1:

Он не удаляет секунды. Он просто придерживается значения по умолчанию для печати и форматирования, которое не включает подсекунды.

Посмотрите пример, который

  • на самом деле имеет подсекундные записи
  • выполняется в сеансе с options(digits.secs) правильным набором
  • исправлена одна ошибка, которая была у вас в строке формата

ДЕМОНСТРАЦИЯ:

 R> options(digits.secs=6)    # important to tell R we want subsecs
R> input <- '17-MAY-16 04.51.34.123456 PM'
R> as.POSIXct(input, '%d-%b-%y %I.%M.%OS %p', tz = 'America/New_York')
[1] "2016-05-17 16:51:34.123456 EDT"
R> 
  

Если мы сбросим digits.secs=0 его, он вернется только к целым секундам (что, в конце концов, является хорошим значением по умолчанию для многих настроек, хотя можно утверждать, что %0S это может переопределить его …)

 R> options(digits.secs=0)    # reset
R> as.POSIXct(input, '%d-%b-%y %I.%M.%OS %p', tz = 'America/New_York')
[1] "2016-05-17 16:51:34 EDT"
R> 
  

Также обратите внимание на небольшое изменение в строке формата. Не используйте оба %S и %OS .

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

1. Спасибо! Я не понимал, что было ошибкой использовать оба %S и %OS в строке форматирования. Это решило мою проблему.

2. Хорошо … На самом деле у меня есть пакет для этих проблем 😉 в любое время (но он имеет сильное предпочтение %Y over %y по обычным причинам).