#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
зависят от локали, поэтому, если ваша локаль установлена где-то, где названия дней недели и месяцев отличаются от формата, который вы анализируете, вам нужно будет изменить локаль в соответствии с @RuiBarradas5. Да, это была моя точка зрения. Не удаляйте конечные цифры, замените запятую точкой и используйте формат
"%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