2011-10-25 13 views
6

Tengo un archivo que da formato de fecha y hora como 25/03/2011 9:15:00 p.m.Analizar marca de tiempo con a.m./p.m

¿Cómo puedo analizar este texto para una clase de fecha y hora, ya sea con o strptimeas.POSIXct?

Esto es lo que casi funciona:

> as.POSIXct("25/03/2011 9:15:00", format="%d/%m/%Y %I:%M:%S", tz="UTC") 
[1] "2011-03-25 09:15:00 UTC" 

Aquí es lo que no funciona, pero me gustaría tener trabajo:

> as.POSIXct("25/03/2011 9:15:00 p.m.", format="%d/%m/%Y %I:%M:%S %p", tz="UTC") 
[1] NA 

estoy usando R versión 2.13.2 (2011-09-30) en MS Windows. Mi configuración regional de trabajo es "C":

Sys.setlocale("LC_TIME", "C") 
+0

'? Strptime' dice que'% p' es "Indicador AM/PM en la configuración regional". http://stdcxx.apache.org/doc/stdlibref/time-put.html dice en la configuración regional C que es AM/PM, por lo que creo que tendrá que 'sub (" am "," AM ",. ..) 'y' sub ("pm", "PM", ...) 'primero. (Probablemente haya una expresión regular pulida que lo haría todo de una vez.) –

+0

@BenBolker: Tengo su expresión regular pulida aquí ... :) –

Respuesta

10

Parece que el indicador AM/PM no puede incluir signos de puntuación. Probarlo después de la eliminación de la puntuacion:

td <- "25/03/2011 9:15:00 p.m." 
tdClean <- gsub("(.)\\.?[Mm]\\.?","\\1m",td) 
as.POSIXct(tdClean, format="%d/%m/%Y %I:%M:%S %p", tz="UTC") 
# [1] "2011-03-25 21:15:00 UTC" 
0

encontré con esto, como otra opción que puede utilizar stringr paquete.

library(stringr) 
data$date2 <- str_sub(data$date, end = -4) 
# this removes the punctuation but holds onto the A/P values 
data$date2 <- str_c(data$date2, 'm') 
# adds the required m 
Cuestiones relacionadas