Конвертировать неприятный формат времени из tera term

#r #datetime

#r #дата-время

Вопрос:

Я получил этот формат времени

Пт, 28 августа, 11:34:57 915 2020

из журнала регистрации данных tera term. Я пытаюсь найти возможность преобразовать его в более удобный формат времени. До сих пор я не мог найти подходящий пакет (например, chron , lubridate и POSIXct ) или что-то подобное. Но до сих пор у меня никогда не возникало такой проблемы при преобразовании форматов времени, поэтому я надеюсь, что другие уже что-то знают. В противном случае мне придется как-то перестроить его вручную.

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

1. Я знаю, что это старый пост, на который я ответил, но любопытно, есть ли у вас доступ к скрипту teraterm для внесения в него изменений? Если это так, вы можете вызвать gettime time_str <строка формата> с аргументом строки пользовательского формата, чтобы создать временную метку в формате, который вы предпочитаете. Постобработка не требуется.

Ответ №1:

Вы могли бы попробовать:

 strptime("Fri Aug 28 11:34:57,915 2020", format = "%a %b %d %H:%M:%S")
#> [1] "2020-08-28 11:34:57 BST"
  

Или, если вы хотите убедиться, что вы правильно записываете год, вам сначала нужно избавиться от запятой с завершающими миллисекундами:

 f <- function(x) strptime(gsub(",\d ", "", x), format = "%a %b %d %H:%M:%S %Y")

f(c("Fri Aug 28 11:34:57,915 2020", "Mon Feb 05 12:21:05,321 2018"))
#> [1] "2020-08-28 11:34:57 BST" "2018-02-05 12:21:05 GMT"
  

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

1. Голосовать за но избавиться от запятой не означает избавиться от десятичных знаков, используйте форматную строку %OS . (И sub(",", ".", x) ).

2. Конечно, там также было strptime. Когда я выполняю ваш приведенный выше код, я получаю NA. Это странно, поскольку это всего лишь одна строка, которую я вообще не изменяю.. должен ли я что-то загружать или около того?

3. @Ben Является ли ваш язык локализацией английского языка? У меня нет, поэтому мне нужно Sys.setlocale("LC_TIME", "en_US.UTF-8") и все работает.

4. @Ben записи в strptime зависят от локали, поэтому, если ваша локаль установлена где-то, где названия дней недели и месяцев отличаются от формата, который вы анализируете, вам нужно будет изменить локаль в соответствии с @RuiBarradas

5. Да, это была моя точка зрения. Не удаляйте конечные цифры, замените запятую точкой и используйте формат "%OS" , чтобы сохранить десятичные цифры.

Ответ №2:

Если формат всегда будет одинаковым, вы можете попытаться извлечь необходимые элементы даты с помощью регулярного выражения (это необходимо для доступа к информации о годе в конце), а затем преобразовать в правильный формат даты:

 test <- "Fri Aug 28 11:34:57,915 2020"

test2 <- gsub(x = test, 
     pattern = "([A-Za-z] ) ([A-Za-z] ) ([0-9] ) ([0-9] ):([0-9] ):([0-9] ),[0-9]  ([0-9] )",
     replacement = "\2 \3 \7 \4:\5:\6")

date <- as.POSIXct(test2, format = "%b %d %Y %H:%M:%S")
date