Dr Eberhard Lisse
2022-Jul-13 13:40 UTC
[R] How to parse a really silly date with lubridate
Hi, I have data file which generated by an otherwise very nice (diabetes log) app, but exports dates really silly. After reading the enclosed mwe.csv into R like so MWE <- read_delim('mwe.csv', delim = ';') %>% select(Date) %>% print() this comes out as: # A tibble: 2 ? 1 Date <chr> 1 9. Jul 2022 at 11:39 2 10. Jul 2022 at 01:58 No matter what I try I am not able to parse this inside R to get at proper dates (I have loaded tidyverse and lubridate). I can easily do somethig csvq -d ';' -t '%e. %b %Y at %H:%i' \ 'SELECT Date as oridate, DATETIME_FORMAT(Date, "%Y-%m-%d %H:%m") AS date FROM mwe' +-----------------------+------------------+ | oridate | date | +-----------------------+------------------+ | 9. Jul 2022 at 11:39 | 2022-07-09 11:07 | | 10. Jul 2022 at 01:58 | 2022-07-10 01:07 | +-----------------------+------------------+ and hence could easily do something like csvq -d ';' -t '%e. %b %Y at %H:%i' \ 'ALTER mwe SET Date = DATETIME_FORMAT(Date, "%Y-%m-%d %H:%m")' but would rather like to be able to do it inside R and would therefor appreciate any advice in this regard. greetings, el -- To email me replace 'nospam' with 'el'
? Wed, 13 Jul 2022 15:40:43 +0200 Dr Eberhard Lisse <nospam at lisse.NA> ?????:> 1 9. Jul 2022 at 11:39 > 2 10. Jul 2022 at 01:58Don't know about lubridate, but the following seems to work: Sys.setlocale('LC_TIME', 'C') strptime( c('9. Jul 2022 at 11:39', '10. Jul 2022 at 01:58'), '%d. %b %Y at %H:%M' ) (Use Sys.getlocale() and on.exit() to restore the previous locale state if you need it.) -- Best regards, Ivan
Does this do the trick? s = c("9. Jul 2022 at 11:39", "10. Jul 2022 at 01:58") as.POSIXct(s, format = "%d. %b %Y at %H:%M") as.POSIXct(s, format = "%d. %b %Y at %H:%M", tz = "UTC") On Wed, Jul 13, 2022 at 9:41 AM Dr Eberhard Lisse <nospam at lisse.na> wrote:> > > Hi, > > I have data file which generated by an otherwise very nice (diabetes > log) app, but exports dates really silly. > > After reading the enclosed mwe.csv into R like so > > MWE <- read_delim('mwe.csv', delim = ';') %>% > select(Date) %>% > print() > > > this comes out as: > > # A tibble: 2 ? 1 > Date > <chr> > 1 9. Jul 2022 at 11:39 > 2 10. Jul 2022 at 01:58 > > > No matter what I try I am not able to parse this inside R to get at > proper dates (I have loaded tidyverse and lubridate). > > I can easily do somethig > > csvq -d ';' -t '%e. %b %Y at %H:%i' \ > 'SELECT Date as oridate, > DATETIME_FORMAT(Date, "%Y-%m-%d %H:%m") AS date > FROM mwe' > > +-----------------------+------------------+ > | oridate | date | > +-----------------------+------------------+ > | 9. Jul 2022 at 11:39 | 2022-07-09 11:07 | > | 10. Jul 2022 at 01:58 | 2022-07-10 01:07 | > +-----------------------+------------------+ > > and hence could easily do something like > > csvq -d ';' -t '%e. %b %Y at %H:%i' \ > 'ALTER mwe > SET Date = DATETIME_FORMAT(Date, "%Y-%m-%d %H:%m")' > > but would rather like to be able to do it inside R and would therefor > appreciate any advice in this regard. > > > greetings, el > > -- > To email me replace 'nospam' with 'el' > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.-- Ben Tupper (he/him) Bigelow Laboratory for Ocean Science East Boothbay, Maine http://www.bigelow.org/ https://eco.bigelow.org
Hello, With lubridate, note in what sequence your datetime elements occur and use the appropriate function. d <- c('9. Jul 2022 at 11:39', '10. Jul 2022 at 01:58') lubridate::dmy_hm(d) #> [1] "2022-07-09 11:39:00 UTC" "2022-07-10 01:58:00 UTC" Hope this helps, Rui Barradas ?s 14:40 de 13/07/2022, Dr Eberhard Lisse escreveu:> > Hi, > > I have data file which generated by an otherwise very nice (diabetes > log) app, but exports dates really silly. > > After reading the enclosed mwe.csv into R like so > > ???? MWE <- read_delim('mwe.csv', delim = ';') %>% > ??????? select(Date) %>% > ??????? print() > > > this comes out as: > > ???? # A tibble: 2 ? 1 > ????Date > ????<chr> > ???? 1 9. Jul 2022 at 11:39 > ???? 2 10. Jul 2022 at 01:58 > > > No matter what I try I am not able to parse this inside R to get at > proper dates (I have loaded tidyverse and lubridate). > > I can easily do somethig > > ???? csvq? -d ';' -t '%e. %b %Y at %H:%i' \ > ??????? 'SELECT Date as oridate, > ??????????? DATETIME_FORMAT(Date, "%Y-%m-%d %H:%m") AS date > ??????? FROM mwe' > > ???? +-----------------------+------------------+ > ???? |??????? oridate??????? |?????? date?????? | > ???? +-----------------------+------------------+ > ???? | 9. Jul 2022 at 11:39? | 2022-07-09 11:07 | > ???? | 10. Jul 2022 at 01:58 | 2022-07-10 01:07 | > ???? +-----------------------+------------------+ > > and hence could easily do something like > > ???? csvq? -d ';' -t '%e. %b %Y at %H:%i' \ > ????? 'ALTER mwe > ????? SET Date = DATETIME_FORMAT(Date, "%Y-%m-%d %H:%m")' > > but would rather like to be able to do it inside R and would therefor > appreciate any advice in this regard. > > > greetings, el >