R/tz.R

Defines functions dtt_adjust_tz.POSIXct dtt_adjust_tz dtt_set_tz.POSIXct dtt_set_tz dtt_tz.hms dtt_tz.POSIXct dtt_tz.Date dtt_tz dtt_sys_tz dtt_reset_sys_tz dtt_set_sys_tz

Documented in dtt_adjust_tz dtt_reset_sys_tz dtt_set_sys_tz dtt_set_tz dtt_sys_tz dtt_tz

#' Set System Time Zone
#'
#' @param tz A string of the time zone to treat as if its the system time zone.
#'
#' @return A string of the old value.
#' @seealso \code{\link{dtt_reset_sys_tz}} and \code{\link{dtt_sys_tz}}
#' @export
#'
#' @examples
#' \dontrun{
#' dtt_sys_tz()
#' old <- dtt_set_sys_tz("Etc/GMT+8")
#' dtt_sys_tz()
#' dtt_reset_sys_tz()
#' dtt_sys_tz()
#' dtt_set_sys_tz(old)
#' dtt_sys_tz()
#' }
dtt_set_sys_tz <- function(tz = NULL) {
  checkor(check_null(tz), check_string(tz))
  sys_tz <- options(dtt.sys_tz = tz)$dtt.sys_tz
  if(is.null(sys_tz)) sys_tz <- Sys.timezone()
  invisible(sys_tz)
}

#' @describeIn dtt_set_sys_tz Reset System Time Zone
#' @export
dtt_reset_sys_tz <- function() {
  dtt_set_sys_tz()
}

#' Get System Time Zone
#' 
#' The user also has the option to set the value returned by \code{dtt_sys_tz()}
#' using \code{\link{dtt_set_sys_tz}}.
#'
#' @return A string of the time zone.
#' @export
#'
#' @examples
#' dtt_sys_tz()
dtt_sys_tz <- function() {
  getOption("dtt.sys_tz", Sys.timezone())
}

#' Time Zone
#'
#' @param x A \code{\link{dtt}} object.
#' @param ... Unused.
#'
#' @return A string of the time zone.
#' @export
#'
#' @examples
#' dtt_tz(Sys.time())
dtt_tz <- function(x, ...) {
  UseMethod("dtt_tz")
}

#' @export
dtt_tz.Date <- function(x, ...) {
  check_unused(...)
  dtt_sys_tz()
}

#' @export
dtt_tz.POSIXct <- function(x, ...) {
  check_unused(...)
  tz <- attr(x, "tzone")
  if(is.null(tz) || identical(tz, "")) return(dtt_sys_tz())
  tz
}

#' @export
dtt_tz.hms <- function(x, ...) {
  check_unused(...)
  dtt_sys_tz()
}

#' Set Time Zone
#' 
#' Sets the time zone without adjusting the time.
#'
#' @param x A POSIXct vector.
#' @param tz A string of the new time zone.
#' @param ... Unused.
#'
#' @return The POSIXct vector with the new time zone.
#' @seealso \code{\link{dtt_adjust_tz}}
#' @export
#'
#' @examples
#' dtt_set_tz(Sys.time(), tz = "UTC")
dtt_set_tz <- function(x, tz = dtt_sys_tz(), ...) {
  UseMethod("dtt_set_tz")
}

#' @export
dtt_set_tz.POSIXct <- function(x, tz = dtt_sys_tz(), ...) {
  check_string(tz)
  dtt_date_time(format(x, tz = dtt_tz(x)), tz = tz)
}

#' Adjust Time Zone
#' 
#' Adjust the time zone and time.
#'
#' @param x A POSIXct vector.
#' @param tz A string of the new time zone.
#' @param ... Unused.
#'
#' @return The POSIXct vector with the new time zone and time.
#' @seealso \code{\link{dtt_set_tz}}
#' @export
#'
#' @examples
#' dtt_adjust_tz(Sys.time(), tz = "UTC")
dtt_adjust_tz <- function(x, tz = dtt_sys_tz(), ...) {
  UseMethod("dtt_adjust_tz")
}

#' @export
dtt_adjust_tz.POSIXct <- function(x, tz = dtt_sys_tz(), ...) {
  check_string(tz)
  attr(x, "tzone") <- tz
  x
}
poissonconsulting/dttr documentation built on Feb. 20, 2021, 12:18 a.m.