Sto lavorando con dati .csv esportati da Teradata. Diverse colonne erano in origine timestamp con fusi orari, quindi dopo aver caricato il file .csv in R mi piacerebbe convertire queste colonne (che sono caricate come stringhe) in POSIXlt o POSIXct. Sto usando strptime
, ma il formato del fuso orario dal file .csv non corrisponde a quello che si aspetta strptime
. Ad esempio, si aspetta -0400
ma il formato .csv ha il formato -04:00
in cui i due punti separano le ore ei minuti.Utilizzo di strptime% z con formato di fuso orario speciale
Posso rimuovere i due punti, ma questo è un ulteriore passaggio e complicazione che vorrei evitare se possibile. C'è un modo per dire a strptime
di utilizzare un formato diverso per il fuso orario (%z
)?
Ecco un esempio:
## Example data:
x <- c("2011-10-12 22:17:13.860746-04:00", "2011-10-12 22:17:13.860746+00:00")
format <- "%Y-%m-%d %H:%M:%OS%z"
## Doesn't work:
strptime(x,format)
## [1] NA NA
## Ignores the timezone:
as.POSIXct(x)
## [1] "2011-10-12 22:17:13 EDT" "2011-10-12 22:17:13 EDT"
## Remove the last colon:
x2 <- gsub("(.*):", "\\1", x)
x2
## [1] "2011-10-12 22:17:13.860746-0400" "2011-10-12 22:17:13.860746+0000"
## This works, but requires extra processing (removing the colon)
strptime(x2,format)
## [1] "2011-10-12 22:17:13" "2011-10-12 18:17:13"
Così sto cercando di ottenere quest'ultimo risultato usando qualcosa come strptime(x,"%Y-%m-%d %H:%M:%OS%zz")
, dove %zz
è un'espressione personalizzata per il fuso orario che riconosce il formato -04:00
. O %zH:%zM
potrebbe essere ancora meglio.
Se questo non è possibile, qualcuno ha una funzione slick/flessibile per convertire stringhe (di vari formati) in date per più colonne di un data.frame/data.table?
E 'il 2016 e il mondo è ancora avere a che fare con questo ... – sehe