2013-04-13 7 views
10

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

myDateTime <- "11/02/2014 14:22:45" 

Я хотел бы видеть:

myTime 
[1] "14:22:45" 

часового пояса не нужно.

Я уже пробовал (из других ответов)

as.POSIXct(substr(myDateTime, 12,19),format="%H:%M:%S") 

[1] "2013-04-13 14:22:45 NZST"

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

Благодаря

Edit:

Оказывается, нет чистого «времени» объект, поэтому каждый раз должен также иметь дату.

В конце концов я использовал

as.POSIXct(as.numeric(as.POSIXct(myDateTime)) %% 86400, origin = "2000-01-01") 

, а не решение характер, потому что мне нужно делать арифметические результаты. Это решение похоже на мое оригинальное, за исключением того, что в этом случае можно контролировать последовательность - «2000-01-01», тогда как моя попытка просто использовала текущую дату во время выполнения.

+1

Я в конце концов наткнулся на хрон, у которого есть объект класса «времена». Это делает добавление намного проще, например. 18:00 + 12:00 = 1,25 дня. – nacnudus

+0

вы также можете использовать пакет 'hms' после вызова' format() ', то есть' hms :: as.hms (x) ' – Von

ответ

4

Если время в течение дня по Гринвичу полезно для вашей проблемы, вы можете получить его с помощью оператора %%, остального оператора, оставив по модулю 86400 (количество секунд в день).

stamps <- c("2013-04-12 19:00:00", "2010-04-01 19:00:01", "2018-06-18 19:00:02") 
as.numeric(as.POSIXct(stamps)) %% 86400 
## [1] 0 1 2 
+0

Любите волшебное число ['60 * 60 * 24'] (https://www.google.com/search?q=60*60*24). – Jim

17

Я думаю, что вы ищете функцию format.

(x <- strptime(myDateTime, format="%d/%m/%Y %H:%M:%S")) 
#[1] "2014-02-11 14:22:45" 
format(x, "%H:%M:%S") 
#[1] "14:22:45" 

Это character, не «время», но будет работать с чем-то вроде aggregate, если это то, что вы имеете в виду под «анализировать события, записанные в течение нескольких дней по времени только день.»

+0

У меня проблема с функцией strptime. Если я добавлю текст перед датой следующего вида: strptime («привет, 23 мар 2010 14:36:38 -0400», «% a,% d% b% Y% H:% M:% S% z ") #NA Любая идея, где проблема – Ankit

+0

@ Убедитесь, что вы должны учитывать ее в аргументе' format'. Попробуйте следующее: 'strptime (" hello Tue, 23.03.2010 14:36:38 -0400 "," привет% a,% d% b% Y% H:% M:% S% z ")' – GSee

+0

@GSee Great ответ. Это то, что я искал. – Gandalf

Смежные вопросы