## ** orders are much easier to write **
x <- c("09-01-01", "09-01-02", "09-01-03")
parse_date_time(x, "ymd")
parse_date_time(x, "y m d")
parse_date_time(x, "%y%m%d")
# "2009-01-01 UTC" "2009-01-02 UTC" "2009-01-03 UTC"
## ** heterogenuous date-times **
x <- c("09-01-01", "090102", "09-01 03", "09-01-03 12:02")
parse_date_time(x, c("ymd", "ymd HM"))
## ** different ymd orders **
x <- c("2009-01-01", "02022010", "02-02-2010")
parse_date_time(x, c("dmY", "ymd"))
## "2009-01-01 UTC" "2010-02-02 UTC" "2010-02-02 UTC"
## ** truncated time-dates **
x <- c("2011-12-31 12:59:59", "2010-01-01 12:11", "2010-01-01 12", "2010-01-01")
parse_date_time(x, "Ymd HMS", truncated = 3)
parse_date_time(x, "ymd_hms", truncated = 3)
## [1] "2011-12-31 12:59:59 UTC" "2010-01-01 12:11:00 UTC"
## [3] "2010-01-01 12:00:00 UTC" "2010-01-01 00:00:00 UTC"
## ** specifying exact formats and avoiding training and guessing **
parse_date_time(x, c("%m-%d-%y", "%m%d%y", "%m-%d-%y %H:%M"), exact = TRUE)
## [1] "2001-09-01 00:00:00 UTC" "2002-09-01 00:00:00 UTC" NA "2003-09-01 12:02:00 UT
parse_date_time(c('12/17/1996 04:00:00','4/18/1950 0130'),
c('%m/%d/%Y %I:%M:%S','%m/%d/%Y %H%M'), exact = TRUE)
## [1] "1996-12-17 04:00:00 UTC" "1950-04-18 01:30:00 UTC"
## ** fast parsing **
## Not run:
# options(digits.secs = 3)
# ## random times between 1400 and 3000
# tt <- as.character(.POSIXct(runif(1000, -17987443200, 32503680000)))
# tt <- rep.int(tt, 1000)
#
# system.time(out <- as.POSIXct(tt, tz = "UTC"))
# system.time(out1 <- ymd_hms(tt)) # constant overhead on long vectors
# system.time(out2 <- parse_date_time2(tt, "YmdHMOS"))
# system.time(out3 <- fast_strptime(tt, "%Y-%m-%d %H:%M:%OS"))
#
# all.equal(out, out1)
# all.equal(out, out2)
# all.equal(out, out3)
# ## End(Not run)
## ** how to use `select_formats` argument **
## By default %Y has precedence:
parse_date_time(c("27-09-13", "27-09-2013"), "dmy")
## [1] "13-09-27 UTC" "2013-09-27 UTC"
## to give priority to %y format, define your own select_format function:
my_select <- function(trained){
n_fmts <- nchar(gsub("[^%]", "", names(trained))) + grepl("%y", names(trained))*1.5
names(trained[ which.max(n_fmts) ])
}
parse_date_time(c("27-09-13", "27-09-2013"), "dmy", select_formats = my_select)
## [1] "2013-09-27 UTC" "2013-09-27 UTC"
## ** invalid times with "fast" parcing **
parse_date_time("2010-03-14 02:05:06", "YmdHMS", tz = "America/New_York")
## [1] NA
parse_date_time2("2010-03-14 02:05:06", "YmdHMS", tz = "America/New_York")
## [1] "2010-03-14 03:05:06 EDT"
parse_date_time2("2010-03-14 02:05:06", "YmdHMS", tz = "America/New_York", lt = TRUE)
## [1] "2010-03-14 02:05:06 America/New_York"
Run the code above in your browser using DataCamp Workspace