• date_zone() gets the time zone.

  • date_set_zone() sets the time zone. This retains the underlying duration, but changes the printed time depending on the zone that is chosen.

date_zone(x)

date_set_zone(x, zone)

Arguments

x

[POSIXct / POSIXlt]

A date-time vector.

zone

[character(1)]

A valid time zone to switch to.

Value

  • date_zone() returns a string containing the time zone.

  • date_set_zone() returns x with an altered printed time. The underlying duration is not changed.

Details

This function is only valid for date-times, as clock treats R's Date class as a naive type, which always has a yet-to-be-specified time zone.

Examples

library(magrittr) # Cannot set or get the zone of Date. # clock assumes that Dates are naive types, like naive-time. x <- as.Date("2019-01-01") try(date_zone(x))
#> Error : Can't get the zone of a 'Date'.
try(date_set_zone(x, "America/New_York"))
#> Error : Can't set the zone of a 'Date'.
x <- as.POSIXct("2019-01-02 01:30:00", tz = "America/New_York") x
#> [1] "2019-01-02 01:30:00 EST"
date_zone(x)
#> [1] "America/New_York"
# If it is 1:30am in New York, what time is it in Los Angeles? # Same underlying duration, new printed time date_set_zone(x, "America/Los_Angeles")
#> [1] "2019-01-01 22:30:00 PST"
# If you want to retain the printed time, but change the underlying duration, # convert to a naive-time to drop the time zone, then convert back to a # date-time. Be aware that this requires that you handle daylight saving time # irregularities with the `nonexistent` and `ambiguous` arguments to # `as.POSIXct()`! x %>% as_naive_time() %>% as.POSIXct("America/Los_Angeles")
#> [1] "2019-01-02 01:30:00 PST"
y <- as.POSIXct("2021-03-28 03:30:00", "America/New_York") y
#> [1] "2021-03-28 03:30:00 EDT"
y_nt <- as_naive_time(y) y_nt
#> <time_point<naive><second>[1]> #> [1] "2021-03-28 03:30:00"
# Helsinki had a daylight saving time gap where they jumped from # 02:59:59 -> 04:00:00 try(as.POSIXct(y_nt, "Europe/Helsinki"))
#> Error : Nonexistent time due to daylight saving time at location 1. #> Resolve nonexistent time issues by specifying the `nonexistent` argument.
as.POSIXct(y_nt, "Europe/Helsinki", nonexistent = "roll-forward")
#> [1] "2021-03-28 04:00:00 EEST"
as.POSIXct(y_nt, "Europe/Helsinki", nonexistent = "roll-backward")
#> [1] "2021-03-28 02:59:59 EET"