| Type: | Package | 
| Title: | Datetimes with Optional UTC Offsets and/or Heterogeneous Time Zones | 
| Version: | 1.0.0 | 
| Description: | Supports import/export for a number of datetime string standards and R datetime classes often including lossless re-export of any original reduced precision including 'ISO 8601' https://en.wikipedia.org/wiki/ISO_8601 and 'pdfmark' https://opensource.adobe.com/dc-acrobat-sdk-docs/library/pdfmark/ datetime strings. Supports local/global datetimes with optional UTC offsets and/or (possibly heterogeneous) time zones with up to nanosecond precision. | 
| URL: | https://trevorldavis.com/R/datetimeoffset/, https://github.com/trevorld/r-datetimeoffset | 
| BugReports: | https://github.com/trevorld/r-datetimeoffset/issues | 
| License: | MIT + file LICENSE | 
| Encoding: | UTF-8 | 
| RoxygenNote: | 7.3.1 | 
| Depends: | R (≥ 3.4.0) | 
| Imports: | clock (≥ 0.7.3), methods, purrr (≥ 1.0.0), vctrs (≥ 0.5.0) | 
| Suggests: | lubridate (≥ 1.9.0), nanotime (≥ 0.3.11), knitr, parttime, rmarkdown, testthat (≥ 3.0.0) | 
| VignetteBuilder: | knitr, rmarkdown | 
| Config/testthat/edition: | 3 | 
| NeedsCompilation: | no | 
| Packaged: | 2025-03-24 16:22:42 UTC; trevorld | 
| Author: | Trevor L. Davis | 
| Maintainer: | Trevor L. Davis <trevor.l.davis@gmail.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2025-03-24 16:50:02 UTC | 
Coerce to "datetimeoffset" objects
Description
as_datetimeoffset() coerces to datetimeoffset() objects.
Usage
as_datetimeoffset(x, ...)
## S3 method for class 'datetimeoffset'
as_datetimeoffset(x, ...)
## S3 method for class 'Date'
as_datetimeoffset(x, tz = NA_character_, ...)
## Default S3 method:
as_datetimeoffset(x, ...)
## S3 method for class 'integer'
as_datetimeoffset(x, ...)
## S3 method for class 'numeric'
as_datetimeoffset(x, ...)
## S3 method for class 'POSIXt'
as_datetimeoffset(x, ...)
## S3 method for class 'character'
as_datetimeoffset(x, tz = NA_character_, ...)
## S3 method for class 'nanotime'
as_datetimeoffset(x, tz = "GMT", ...)
## S3 method for class 'partial_time'
as_datetimeoffset(x, ...)
## S3 method for class 'clock_year_month_day'
as_datetimeoffset(x, ...)
## S3 method for class 'clock_year_month_weekday'
as_datetimeoffset(x, ...)
## S3 method for class 'clock_iso_year_week_day'
as_datetimeoffset(x, ...)
## S3 method for class 'clock_year_quarter_day'
as_datetimeoffset(x, ...)
## S3 method for class 'clock_year_day'
as_datetimeoffset(x, ...)
## S3 method for class 'clock_naive_time'
as_datetimeoffset(x, ...)
## S3 method for class 'clock_sys_time'
as_datetimeoffset(x, ...)
## S3 method for class 'clock_zoned_time'
as_datetimeoffset(x, ...)
Arguments
| x | An R object that can reasonably be coerced to a  | 
| ... | Further arguments to certain methods. | 
| tz | Time zone to use for the conversion.
Ignored by  | 
Value
A datetimeoffset() vector
Examples
# ISO 8601 examples
as_datetimeoffset("2020-05-15")
as_datetimeoffset("20200515")
as_datetimeoffset("2020-05-15T08:23:16")
as_datetimeoffset("20200515T082316")
as_datetimeoffset("2020-05-15T08:23:16.003Z")
as_datetimeoffset("20200515T082316Z")
as_datetimeoffset("2020-05-15T08:23:16+03:30")
as_datetimeoffset("20200515T082316+0330")
# Misc supported `as.POSIXlt()` `tryFormats` examples
as_datetimeoffset("2020/05/15 08:23:16")
# pdfmark datetime examples
as_datetimeoffset("D:20200515")
as_datetimeoffset("D:20200515082316")
as_datetimeoffset("D:20200515082316+03'30'")
as_datetimeoffset(Sys.time())
Change time zones while preserving UTC time
Description
datetime_at_tz() changes time zones while preserving UTC time (instead of clock time).
Usage
datetime_at_tz(x, tz = "", ...)
## S3 method for class 'datetimeoffset'
datetime_at_tz(
  x,
  tz = "",
  ...,
  ambiguous = "error",
  nonexistent = "error",
  fill = NA_character_
)
## S3 method for class 'clock_zoned_time'
datetime_at_tz(x, tz = "", ...)
## S3 method for class 'POSIXt'
datetime_at_tz(x, tz = "", ...)
## Default S3 method:
datetime_at_tz(x, tz = "", ...)
Arguments
| x | A datetime object. | 
| tz | The target timezone to change to. | 
| ... | Ignored | 
| ambiguous | What to do when the "clock time" in the new time zone is ambiguous.
See  | 
| nonexistent | What to do when the "clock time" in the new time zone doesn't exist.
See  | 
| fill | If timezone and UTC offset info is missing what
timezone to assume.  See  | 
Value
A datetime object. The UTC time should be the same but with a different time zone.
See Also
set_tz() changes time zones while preserving clock time (instead of UTC time).
Examples
if(all(c("America/Los_Angeles", "America/New_York") %in% OlsonNames())) {
  dt0 <- as_datetimeoffset("2020-01-01T01:01[America/Los_Angeles]")
  dt <- datetime_at_tz(dt0, "America/New_York")
  print(dt)
  dt <- datetime_at_tz(as.POSIXct(dt0), "America/New_York")
  print(dt)
  dt <- datetime_at_tz(clock::as_zoned_time(dt0), "America/New_York")
  print(dt)
  # Can also use `lubridate::with_tz()`
  if (requireNamespace("lubridate")) {
    dt <- lubridate::with_tz(dt0, "America/New_York")
    print(dt)
  }
}
Widen/narrow datetime precision
Description
datetime_widen() sets a floor on the minimum "precision" in the datetime vector
by setting any missing elements to their minimum possible value.
datetime_narrow() sets a cap on the maximum "precision" by setting
any more precise elements missing.
datetime_cast() sets the precision exactly by calling both
datetime_narrow() and datetime_widen().
Usage
datetime_narrow(x, precision, ...)
## S3 method for class 'datetimeoffset'
datetime_narrow(x, precision, ...)
## S3 method for class 'clock_calendar'
datetime_narrow(x, precision, ...)
## S3 method for class 'clock_time_point'
datetime_narrow(
  x,
  precision,
  ...,
  method = c("floor", "round", "ceiling", "cast")
)
## S3 method for class 'POSIXt'
datetime_narrow(
  x,
  precision,
  ...,
  method = c("floor", "round", "ceiling"),
  nonexistent = "error",
  ambiguous = x
)
datetime_widen(x, precision, ...)
## S3 method for class 'datetimeoffset'
datetime_widen(
  x,
  precision,
  ...,
  year = 0L,
  month = 1L,
  day = 1L,
  hour = 0L,
  minute = 0L,
  second = 0L,
  nanosecond = 0L,
  na_set = FALSE
)
## S3 method for class 'clock_calendar'
datetime_widen(x, precision, ...)
## S3 method for class 'clock_time_point'
datetime_widen(x, precision, ...)
## S3 method for class 'POSIXt'
datetime_widen(x, precision, ...)
datetime_cast(x, precision, ...)
## Default S3 method:
datetime_cast(x, precision, ...)
Arguments
| x | A datetime vector.  Either  | 
| precision | Precision to narrow/widen to. Either "missing", "year", "month", "day", "hour", "minute", "second", or "nanosecond". | 
| ... | Used by some methods.
The default method for  | 
| method | Depending on the class either "floor", "ceiling", "round", and/or "cast". | 
| nonexistent | What to do when the "clock time" in the new time zone doesn't exist.
See  | 
| ambiguous | What to do when the "clock time" in the new time zone is ambiguous.
See  | 
| year | If missing what year to assume | 
| month | If missing what month to assume | 
| day | If missing what day to assume | 
| hour | If missing what hour to assume | 
| minute | If missing what minute to assume | 
| second | If missing what second to assume | 
| nanosecond | If missing what nanosecond to assume | 
| na_set | If  | 
Value
A datetime vector.
Examples
  dts <- as_datetimeoffset(c(NA_character_, "2020", "2020-04-10", "2020-04-10T10:10"))
  datetime_precision(dts)
  datetime_narrow(dts, "day")
  datetime_widen(dts, "day")
  datetime_cast(dts, "day")
  datetime_widen(datetimeoffset(2020L), "day", month = 6, day = 15)
  # vectorized "precision" is allowed
  datetime_narrow(as_datetimeoffset(Sys.time()),
                  c("year", "day", "second"))
  datetime_widen(NA_datetimeoffset_, c("year", "day", "second"), na_set = TRUE)
  library("clock")
  ymd <- year_month_day(1918, 11, 11, 11)
  datetime_narrow(ymd, "day")
  datetime_narrow(ymd, "second") # already narrower than "second"
  datetime_widen(ymd, "second")
  datetime_widen(ymd, "day") # already wider than "day"
  ## Not run: 
    # comparable {clock} calendar methods throw an error in certain cases
    clock::calendar_narrow(ymd, "second") # already narrower than "second"
    clock::calendar_widen(ymd, "day") # already wider than "day"
  
## End(Not run)
  nt <- as_naive_time(ymd)
  datetime_narrow(nt, "day")
  datetime_narrow(nt, "second")
  datetime_widen(nt, "second")
  datetime_widen(nt, "day")
  datetime_cast(nt, "day") # same as clock::time_point_floor(nt, "day")
  datetime_cast(nt, "day", method = "cast") # same as clock::time_point_cast(nt, "day")
Datetime precision
Description
datetime_precision() returns the "precision" of a datetime vector's datetimes.
precision_to_int() converts the precision to an integer.
Usage
datetime_precision(x, ...)
## S3 method for class 'datetimeoffset'
datetime_precision(x, range = FALSE, unspecified = FALSE, ...)
## S3 method for class 'clock_calendar'
datetime_precision(x, ...)
## S3 method for class 'clock_time_point'
datetime_precision(x, ...)
## S3 method for class 'clock_zoned_time'
datetime_precision(x, ...)
## S3 method for class 'nanotime'
datetime_precision(x, ...)
precision_to_int(precision)
Arguments
| x | A datetime vector.  Either  | 
| ... | Used by some S3 methods. | 
| range | If  | 
| unspecified | If  | 
| precision | A datetime precision (as returned by  | 
Value
datetime_precision() returns a character vector of precisions.
Depending on the object either "missing", "year", "quarter", "month", "week",
"day", "hour", "minute", "second", "millisecond", "microsecond", or "nanosecond".
precision_to_int() returns an integer vector.
Examples
  dts <- as_datetimeoffset(c("2020", "2020-04-10", "2020-04-10T10:10"))
  datetime_precision(dts)
  datetime_precision(dts, range = TRUE)
  dt <- datetimeoffset(2020, NA_integer_, 10)
  datetime_precision(dt)
  datetime_precision(dt, unspecified = TRUE)
  precision_to_int("year") < precision_to_int("day")
  library("clock")
  datetime_precision(year_month_day(1918, 11, 11))
  datetime_precision(sys_time_now())
  datetime_precision(zoned_time_now(Sys.timezone()))
Datetime object with optional UTC offsets and/or timezones
Description
datetimeoffset() creates a datetime with possible UTC offset object.
It can be used to represent datetimes with possible UTC offsets
(without necessarily any knowledge of the time zone).
Usage
datetimeoffset(
  year = NA_integer_,
  month = NA_integer_,
  day = NA_integer_,
  hour = NA_integer_,
  minute = NA_integer_,
  second = NA_integer_,
  nanosecond = NA_integer_,
  subsecond_digits = NA_integer_,
  hour_offset = NA_integer_,
  minute_offset = NA_integer_,
  tz = NA_character_
)
Arguments
| year | Year (integer, optional) | 
| month | Month (integer, optional) | 
| day | Day (integer, optional) | 
| hour | Hour (integer, optional) | 
| minute | Minute (integer, optional) | 
| second | Second (integer, optional) | 
| nanosecond | Nanosecond (integer, optional) | 
| subsecond_digits | Number of digits used by fractional seconds (integer, optional) | 
| hour_offset | UTC offset in hours (integer, optional) | 
| minute_offset | UTC offset in minutes (integer, optional). Will be coerced to a non-negative value. | 
| tz | Time zone (character, optional) | 
Value
A vctrs record with class datetimeoffset.
Examples
  datetimeoffset(2020)
  datetimeoffset(2020, 5)
  datetimeoffset(2020, 5, 15)
  datetimeoffset(2020, 5, 15, 8)
  datetimeoffset(2020, 5, 15, 8, 23)
  datetimeoffset(2020, 5, 15, 8, 23, 16) # local time with unknown timezone
  if ("US/Pacific" %in% OlsonNames())
    datetimeoffset(2020, 5, 15, 8, 23, 16, tz = "US/Pacific")
  datetimeoffset(2020, 5, 15, 8, 23, 16, tz = "GMT")
  datetimeoffset(2020, 5, 15, 8, 23, 16, hour_offset = -7)
  datetimeoffset(2020, 5, 15, 8, 23, 16, hour_offset = -7, minute_offset = 30)
Invalid datetimeoffset datetimes
Description
invalid_detect() detects invalid datetimes.
invalid_any() returns TRUE if any datetimes are invalid.
invalid_count() returns number of invalid datetimes.
invalid_remove() removes invalid datetimes.
invalid_resolve() resolves invalid datetimes.
Usage
## S3 method for class 'datetimeoffset'
invalid_detect(x)
## S3 method for class 'datetimeoffset'
invalid_resolve(x, ..., invalid = "NA", nonexistent = "NA")
## S3 method for class 'datetimeoffset'
invalid_any(x)
## S3 method for class 'datetimeoffset'
invalid_count(x)
## S3 method for class 'datetimeoffset'
invalid_remove(x)
Arguments
| x | A  | 
| ... | Ignored. | 
| invalid | Invalid date resolution strategy.  See  | 
| nonexistent | Nonexistent (because of DST spring forward) time resolution strategy.
See  | 
Details
datetimeoffset() datetimes can be considered invalid for three main reasons:
- An invalid "calendar date" such as - "2020-02-30"(there are less than 30 days in February).
- A "nonexistent" datetime due to a Daylight Savings Time "spring forward" such as - "2020-03-08T02:59:59[America/Los_Angeles]"
- Incorrect UTC offsets such as - "2020-03-08T01:59:59-08[America/New_York]"(that particular Eastern time has a UTC offset of- -05)
Value
invalid_detect(), invalid_remove(), and invalid_resolve() return datetimeoffset() vectors.
invalid_count() returns an integer and invalid_any() returns a logical value.
Examples
# invalid date because April only has 30 days
dts <- c("2019-04-30T03:30:00", "2019-04-31T02:30:00")
dts <- as_datetimeoffset(dts)
clock::invalid_detect(dts)
clock::invalid_any(dts)
clock::invalid_count(dts)
clock::invalid_remove(dts)
clock::invalid_resolve(dts)
clock::invalid_resolve(dts, invalid = "previous")
clock::invalid_resolve(dts, invalid = "previous-day")
# non-existent time because of DST "spring forward"
if ("America/Los_Angeles" %in% OlsonNames()) {
  dt <- as_datetimeoffset("2020-03-08T02:59:59[America/Los_Angeles]")
  print(clock::invalid_detect(dt))
  clock::invalid_resolve(dt, nonexistent = "roll-forward")
}
# incorrect UTC offsets
if ("America/New_York" %in% OlsonNames()) {
  dt <- as_datetimeoffset("2020-03-08T01:59:59-08[America/New_York]")
  print(clock::invalid_detect(dt))
  clock::invalid_resolve(dt)
}
Various "datetimeoffset" object utilities
Description
is_datetimeoffset() tests whether a datetime object is of the "datetimeoffset" class.
NA_datetimeoffset_ provides a "missing" "datetimeoffset" object.
datetimeoffset_now() returns the current time in the corresponding time zone(s).
Usage
is_datetimeoffset(x)
NA_datetimeoffset_
datetimeoffset_now(tz = Sys.timezone())
Arguments
| x | An object to be tested | 
| tz | Time zone(s) | 
Format
An object of class datetimeoffset (inherits from vctrs_rcrd, vctrs_vctr) of length 1.
Value
is_datetimeoffset() returns a logical vector.
datetimeoffset_now() returns a datetimeoffset() vector.
Examples
  is_datetimeoffset(as_datetimeoffset(Sys.time()))
  is_datetimeoffset(Sys.time())
  is.na(NA_datetimeoffset_)
  is.na(as_datetimeoffset(""))
  if (all(c("America/Los_Angeles", "America/New_York") %in% OlsonNames()))
    datetimeoffset_now(c("America/Los_Angeles", "America/New_York"))
Fill in missing time zones and/or UTC offsets
Description
fill_tz() fills in missing time zones.
fill_utc_offsets() fills in missing UTC offsets.
Usage
fill_tz(x, tz = "")
fill_utc_offsets(x, ambiguous = "NA")
Arguments
| x | A datetime object | 
| tz | Timezone used to fill in missing time zones | 
| ambiguous | What to do when the "clock time" in the new time zone is ambiguous.
See  | 
Value
A datetime object
Examples
dts <- as_datetimeoffset(c("2020-01-01T01:01:01", "2020-01-01T01:01:01Z"))
fill_tz(dts, "UTC")
fill_tz(dts, Sys.timezone())
clock::as_sys_time(dts)
clock::as_sys_time(fill_tz(dts, "UTC"))
clock::as_zoned_time(dts)
clock::as_zoned_time(fill_tz(dts, ""))
if ("America/New_York" %in% OlsonNames()) {
  # non-ambiguous UTC offsets
  dt <- as_datetimeoffset("2020-11-01T12:30:00[America/New_York]")
  cat("unfilled: ", get_utc_offsets(dt), "\n")
  dt <- fill_utc_offsets(dt)
  cat("filled: ", get_utc_offsets(dt), "\n")
  # ambiguous UTC offsets due to DST
  dt0 <- as_datetimeoffset("2020-11-01T01:30:00[America/New_York]")
  dt <- fill_utc_offsets(dt0)
  cat('`ambiguous = "NA"` (default): ', get_utc_offsets(dt), "\n")
  dt <- fill_utc_offsets(dt0, ambiguous = "earliest")
  cat('`ambiguous = "earliest"`: ', get_utc_offsets(dt), "\n")
  dt <- fill_utc_offsets(dt0, ambiguous = "latest")
  cat('`ambiguos = "latest"`: ', get_utc_offsets(dt), "\n")
}
Convert datetime objects to character
Description
format() returns a datetime string
with as much known information possible (RFC 3339 with de facto standard time zone extension).
format_iso8601() returns an ISO 8601 datetime string.
format_pdfmark() returns a pdfmark datetime string with as much known information possible.
format_strftime() allows base::strftime() style formatting.
format_nanotime() allows CCTZ style formatting.
format_edtf() returns an Extended Date Time Format (EDTF) string.
format_exiftool() returns the date/time string expected by exiftool.
Usage
## S3 method for class 'datetimeoffset'
format(x, ...)
format_iso8601(
  x,
  offsets = TRUE,
  precision = NULL,
  sep = ":",
  mode = c("normal", "toml", "xmp"),
  ...
)
format_pdfmark(x, prefix = "D:")
format_edtf(x, offsets = TRUE, precision = NULL, usetz = FALSE, ...)
format_exiftool(x, mode = c("normal", "xmp", "pdf"), ...)
format_strftime(
  x,
  format = "%Y-%m-%d %H:%M:%S",
  tz = get_tz(x),
  usetz = FALSE,
  fill = mode_tz(x)
)
format_nanotime(
  x,
  format = "%Y-%m-%dT%H:%M:%E9S%Ez",
  tz = get_tz(x),
  fill = ""
)
Arguments
| x | A  | 
| ... | Ignored | 
| offsets | Include the UTC offsets in the formatting | 
| precision | The amount of precision: either "year", "month", "day", "hour", "minute", "second",
"decisecond", "centisecond", "millisecond",
"hundred microseconds", "ten microseconds", "microsecond",
"hundred nanoseconds", "ten nanoseconds", or "nanosecond".
If  | 
| sep | UTC offset separator. Either ":" or "". | 
| mode | If  | 
| prefix | Prefix to use.  Either  | 
| usetz | Include the time zone in the formatting | 
| format | For  | 
| tz | A character string specifying the time zone to be used for the conversion. Can be a length greater than one. | 
| fill | If timezone and UTC offset info is missing what
timezone to assume.  See  | 
Value
A character vector
Examples
  # ISO 8601 datetimes
  format_iso8601(as_datetimeoffset("2020-05"))
  format_iso8601(as_datetimeoffset("2020-05-10 20:15"))
  format_iso8601(as_datetimeoffset("2020-05-10 20:15:05-07"))
  if (requireNamespace("lubridate"))
    lubridate::format_ISO8601(as_datetimeoffset("2020-05-10 20:15:05-07"))
  # pdfmark datetimes
  format_pdfmark(as_datetimeoffset("2020-05"))
  format_pdfmark(as_datetimeoffset("2020-05-10 20:15"))
  format_pdfmark(as_datetimeoffset("2020-05-10 20:15:05-07"))
  # strftime style formatting
  dt <- as_datetimeoffset("2020-05-10 20:15")
  format_strftime(dt)
  format_strftime(dt, format = "%c")
  # CCTZ style formatting
  if (requireNamespace("nanotime")) {
    dt <- as_datetimeoffset(Sys.time())
    format_nanotime(dt, format = "%F %H:%M:%E7S %Ez") # SQL Server datetimeoffset
  }
  # EDTF style formatting
  format_edtf(as_datetimeoffset("2020-05"))
  format_edtf(as_datetimeoffset("2020-05-10T20:15:05-07"))
  dt <- datetimeoffset(2020, NA_integer_, 10)
  format_edtf(dt)
  # `exiftool` formatting
  format_exiftool(as_datetimeoffset("2020:05:10"))
  format_exiftool(as_datetimeoffset("2020:05:10 20:15"))
  format_exiftool(as_datetimeoffset("2020:05:10 20:15:05-07:00"))
Convert to other datetime objects
Description
We register S3 methods to convert datetimeoffset() objects to
other R datetime objects:
Usage
## S3 method for class 'datetimeoffset'
as.Date(x, ...)
## S3 method for class 'datetimeoffset'
as_date(x, ...)
## S3 method for class 'datetimeoffset'
as.POSIXct(x, tz = mode_tz(x), ..., fill = "")
## S3 method for class 'datetimeoffset'
as_date_time(x, zone = mode_tz(x), ..., fill = NA_character_)
## S3 method for class 'datetimeoffset'
as.POSIXlt(x, tz = mode_tz(x), ..., fill = "")
## S3 method for class 'datetimeoffset'
as_year_month_day(x, ...)
## S3 method for class 'datetimeoffset'
as_year_month_weekday(x, ...)
## S3 method for class 'datetimeoffset'
as_iso_year_week_day(x, ...)
## S3 method for class 'datetimeoffset'
as_year_quarter_day(x, ..., start = NULL)
## S3 method for class 'datetimeoffset'
as_year_day(x, ...)
## S3 method for class 'datetimeoffset'
as_naive_time(x, ...)
## S3 method for class 'datetimeoffset'
as_sys_time(
  x,
  ...,
  ambiguous = "error",
  nonexistent = "error",
  fill = NA_character_
)
## S3 method for class 'datetimeoffset'
as_zoned_time(
  x,
  zone = mode_tz(x),
  ...,
  ambiguous = "error",
  nonexistent = "error",
  fill = NA_character_
)
## S3 method for class 'datetimeoffset'
as_weekday(x, ...)
Arguments
| x | A  | 
| ... | Ignored | 
| tz,zone | What time zone to assume | 
| fill | If timezone and UTC offset info is missing what
timezone to assume.  See  | 
| start | The month to start the fiscal year in.
See  | 
| ambiguous | What to do when the "clock time" in the new time zone is ambiguous.
See  | 
| nonexistent | What to do when the "clock time" in the new time zone doesn't exist.
See  | 
Details
We register S3 methods for the following:
-  as.Date()andclock::as_date()returns the "local" date as abase::Date()object
-  as.POSIXct()andclock::as_date_time()returns the "local" datetime as abase::POSIXct()object
-  as.POSIXlt()returns the "local" datetime as abase::POSIXlt()object
-  nanotime::as.nanotime()returns the "global" datetime as ananotime::nanotime()object
-  parttime::as.parttime()returns the "local" datetime as aparttime::parttime()object
-  clock::as_year_month_day()returns aclock::year_month_day()calendar
-  clock::as_year_month_weekday()returns aclock::year_month_weekday()calendar
-  clock::as_iso_year_week_day()returns aclock::iso_year_week_day()calendar
-  clock::as_year_quarter_day()returns aclock::year_quarter_day()calendar
-  clock::as_year_day()returns aclock::year_day()calendar
-  clock::as_naive_time()returns a "clock" naive-time
-  clock::as_sys_time()returns a "clock" sys-time
-  clock::as_zoned_time()returns a "clock" zoned-time
-  clock::as_weekday()returns aclock::weekday()object
Value
A datetime object vector
Examples
  # {base}
  today <- as_datetimeoffset(Sys.Date())
  now <- as_datetimeoffset(Sys.time())
  as.Date(today)
  as.Date(now)
  as.POSIXct(now)
  as.POSIXlt(now)
  # {clock}
  clock::as_date(today)
  clock::as_date_time(now)
  clock::as_year_month_day(now)
  clock::as_year_month_weekday(now)
  clock::as_iso_year_week_day(now)
  clock::as_year_quarter_day(now)
  clock::as_year_day(now)
  clock::as_naive_time(now)
  clock::as_sys_time(now)
  clock::as_zoned_time(now)
  clock::as_weekday(now)
  if (requireNamespace("nanotime")) {
    nanotime::as.nanotime(now)
  }
  if (requireNamespace("parttime")) {
    parttime::as.parttime(now)
  }
Get/set UTC offset strings
Description
get_utc_offsets() and set_utc_offsets() gets/sets UTC offset strings
Usage
get_utc_offsets(x, sep = ":")
set_utc_offsets(x, value)
Arguments
| x | A  | 
| sep | Separator between hour and minute offsets. Either ":" or "". | 
| value | Replace UTC offset string | 
Value
get_utc_offsets() returns a character string of UTC offset info.
set_utc_offsets() returns a datetime (whose UTC offset info has been set).
See Also
get_hour_offset(), set_hour_offset(), get_minute_offset(), and set_minute_offset()
allow getting/setting the separate individual hour/minute offset components with integers.
fill_utc_offsets() fills any missing UTC offsets using non-missing time zones.
Examples
  dt <- as_datetimeoffset("2020-01-01T01:01")
  get_utc_offsets(dt)
  dt <- set_utc_offsets(dt, "-07:00")
  get_utc_offsets(dt)
  dt <- set_utc_offsets(dt, "+0800")
  get_utc_offsets(dt)
  dt <- set_utc_offsets(dt, "+00")
  get_utc_offsets(dt)
  dt <- set_utc_offsets(dt, NA_character_)
  get_utc_offsets(dt)
Get datetime components
Description
Getter methods for datetimeoffset() objects.
Usage
## S3 method for class 'datetimeoffset'
get_year(x)
## S3 method for class 'datetimeoffset'
get_month(x)
## S3 method for class 'datetimeoffset'
get_day(x)
## S3 method for class 'datetimeoffset'
get_hour(x)
## S3 method for class 'datetimeoffset'
get_minute(x)
## S3 method for class 'datetimeoffset'
get_second(x)
## S3 method for class 'datetimeoffset'
get_nanosecond(x)
get_subsecond_digits(x)
## S3 method for class 'datetimeoffset'
get_subsecond_digits(x)
## Default S3 method:
get_subsecond_digits(x)
get_hour_offset(x)
## S3 method for class 'datetimeoffset'
get_hour_offset(x)
## Default S3 method:
get_hour_offset(x)
## S3 method for class 'POSIXt'
get_hour_offset(x)
get_minute_offset(x)
## S3 method for class 'datetimeoffset'
get_minute_offset(x)
## Default S3 method:
get_minute_offset(x)
## S3 method for class 'POSIXt'
get_minute_offset(x)
get_tz(x)
## S3 method for class 'datetimeoffset'
get_tz(x)
## S3 method for class 'Date'
get_tz(x)
## S3 method for class 'POSIXt'
get_tz(x)
## S3 method for class 'clock_zoned_time'
get_tz(x)
## Default S3 method:
get_tz(x)
Arguments
| x | A datetime object. | 
Details
We implement datetimeoffset() support for the following S3 methods from clock:
-  get_year()
-  get_month()
-  get_day()
-  get_hour()
-  get_minute()
-  get_second()
-  get_nanosecond()
We also implemented new S3 getter methods:
-  get_subsecond_digits()
-  get_hour_offset()
-  get_minute_offset()
-  get_tz()
We also implement datetimeoffset() support for the following S3 methods from lubridate:
-  year()
-  month()
-  mday()
-  hour()
-  minute()
-  second()
-  tz()
-  date()
Value
The component
Examples
library("clock")
if ("Europe/Paris" %in% OlsonNames()) {
  dt <- as_datetimeoffset("1918-11-11T11:11:11.1234+00:00[Europe/Paris]")
} else {
  dt <- as_datetimeoffset("1918-11-11T11:11:11.1234")
}
get_year(dt)
get_month(dt)
get_day(dt)
get_hour(dt)
get_minute(dt)
get_second(dt)
get_nanosecond(dt)
get_subsecond_digits(dt)
get_hour_offset(dt)
get_minute_offset(dt)
get_tz(dt)
if (require("lubridate")) {
  paste0(year(dt), "-", month(dt), "-", day(dt),
         "T", hour(dt), ":", minute(dt), ":", second(dt),
         "[", tz(dt), "]")
}
Get most common time zone
Description
'mode_tz()' gets the most common time zone in the datetime object. If a tie we use the time zone used first. Intended for use when coercing from a datetime object that supports multiple heterogeneous time zones to a datetime object that only supports one time zone
Usage
mode_tz(x, ...)
## S3 method for class 'datetimeoffset'
mode_tz(x, tz = "", ...)
## Default S3 method:
mode_tz(x, ...)
Arguments
| x | A datetime object. | 
| ... | Ignored | 
| tz | A timezone string to use for missing time zones.
"" will be treated as equivalent to  | 
Value
Timezone string
Examples
  dt <- as_datetimeoffset(Sys.time())
  print(mode_tz(dt))
  if (all(c("America/Los_Angeles", "America/New_York") %in% OlsonNames())) {
    dt <- as_datetimeoffset("2020-01-01",
                             tz = c("America/Los_Angeles", "America/New_York"))
    print(mode_tz(dt))
    print(Sys.timezone()) # timezone to be used for missing time zones
    dt <- as_datetimeoffset("2020-01-01",
                             tz = c("America/New_York", NA_character_, NA_character_))
    print(mode_tz(dt))
  }
Set datetime components
Description
Setter methods for datetimeoffset() objects.
Usage
## S3 method for class 'datetimeoffset'
set_year(x, value, ..., na_set = FALSE)
## S3 method for class 'datetimeoffset'
set_month(x, value, ..., na_set = FALSE)
## S3 method for class 'datetimeoffset'
set_day(x, value, ..., na_set = FALSE)
## S3 method for class 'datetimeoffset'
set_hour(x, value, ..., na_set = FALSE)
## S3 method for class 'datetimeoffset'
set_minute(x, value, ..., na_set = FALSE)
## S3 method for class 'datetimeoffset'
set_second(x, value, ..., na_set = FALSE)
## S3 method for class 'datetimeoffset'
set_nanosecond(x, value, ..., na_set = FALSE, digits = NULL)
set_subsecond_digits(x, value, ...)
## S3 method for class 'datetimeoffset'
set_subsecond_digits(x, value, ..., na_set = FALSE)
set_hour_offset(x, value, ...)
## S3 method for class 'datetimeoffset'
set_hour_offset(x, value, ..., na_set = FALSE)
set_minute_offset(x, value, ...)
## S3 method for class 'datetimeoffset'
set_minute_offset(x, value, ..., na_set = FALSE)
set_tz(x, value, ...)
## S3 method for class 'datetimeoffset'
set_tz(x, value, ..., na_set = FALSE)
## S3 method for class 'clock_zoned_time'
set_tz(x, value, ..., nonexistent = "error", ambiguous = "error")
## Default S3 method:
set_tz(x, value, ...)
Arguments
| x | A datetime object. | 
| value | The replacement value.  For  | 
| ... | Currently ignored. | 
| na_set | If  | 
| digits | If  | 
| nonexistent | What to do when the "clock time" in the new time zone doesn't exist.
See  | 
| ambiguous | What to do when the "clock time" in the new time zone is ambiguous.
See  | 
Details
We implement datetimeoffset() support for the following S3 methods from clock:
-  set_year()
-  set_month()
-  set_day()
-  set_hour()
-  set_minute()
-  set_second()
-  set_nanosecond()
We also implemented new S3 setter methods:
-  set_hour_offset()
-  set_minute_offset()
-  set_tz()(changes system time but not clock time)
We also implement datetimeoffset() support for the following S4 methods from lubridate:
-  year<-()
-  month<-()
-  day<-()
-  hour<-()
-  minute<-()
-  second<-()
-  date<-()
Value
A datetime object.
Examples
library("clock")
dt <- NA_datetimeoffset_
dt <- set_year(dt, 1918L, na_set = TRUE)
dt <- set_month(dt, 11L)
dt <- set_day(dt, 11L)
dt <- set_hour(dt, 11L)
dt <- set_minute(dt, 11L)
dt <- set_second(dt, 11L)
dt <- set_nanosecond(dt, 123456789L)
dt <- set_subsecond_digits(dt, 4L)
dt <- set_hour_offset(dt, 0L)
dt <- set_minute_offset(dt, 0L)
dt <- set_tz(dt, "Europe/Paris")
format(dt)
if (require("lubridate")) {
  dt <- datetimeoffset(0L)
  year(dt) <- 1918L
  month(dt) <- 11L
  day(dt) <- 11L
  hour(dt) <- 11L
  minute(dt) <- 11L
  second(dt) <- 11L
  if (packageVersion("lubridate") > '1.8.0' &&
      "Europe/Paris" %in% OlsonNames()) {
    tz(dt) <- "Europe/Paris"
  }
  format(dt)
}
Subsecond helper getter/setter
Description
Helper getter/setter methods for the subseconds (aka fractional seconds) of datetimeoffset() objects.
Usage
## S3 method for class 'datetimeoffset'
get_millisecond(x)
## S3 method for class 'datetimeoffset'
set_millisecond(x, value, ..., na_set = FALSE, digits = 3L)
## S3 method for class 'datetimeoffset'
get_microsecond(x)
## S3 method for class 'datetimeoffset'
set_microsecond(x, value, ..., na_set = FALSE, digits = 6L)
get_subsecond(x, ...)
## S3 method for class 'datetimeoffset'
get_subsecond(x, digits = get_subsecond_digits(x), ...)
set_subsecond(x, value, digits = 1L, ...)
## S3 method for class 'datetimeoffset'
set_subsecond(x, value, digits = 1L, ..., na_set = FALSE)
Arguments
| x | A datetime object. | 
| value | The replacement value.  For  | 
| ... | Currently ignored. | 
| na_set | If  | 
| digits | If  | 
Details
Internally datetimeoffset() objects represent subseconds with two fields:
- Nanoseconds (as an integer) 
- Number of subsecond digits (as an integer) 
One can explicitly get/set these fields with
-  get_nanosecond()/set_nanosecond()
-  get_subsecond_digits()/set_subsecond_digits()
We implement datetimeoffset() support for the following S3 methods from clock:
-  get_millisecond()
-  get_microsecond()
-  set_millisecond()(note sets any non-zero microsecond/nanosecond elements to zero)
-  set_microsecond()(note sets any non-zero nanosecond elements to zero)
We implement the following new S3 methods:
-  get_subsecond()
-  set_subsecond()
Value
get_millisecond(), get_microsecond(), and get_subsecond() returns an integer vector.
set_millisecond(), set_microsecond(), and set_subsecond() returns a datetime vector.
Examples
library("clock")
dt <- as_datetimeoffset("2020-01-01T10:10:10.123456789")
format(dt)
get_millisecond(dt)
get_microsecond(dt)
get_subsecond(dt, 1L)
get_subsecond(dt, 7L)
set_microsecond(dt, 123456L)
set_millisecond(dt, 123L)
set_subsecond(dt, 12L, digits = 2L)
set_subsecond(dt, 12L, digits = 3L)
Additional datetime extractors
Description
Additional datetime extractors for datetimeoffset() objects.
Usage
## S3 method for class 'datetimeoffset'
weekdays(x, abbreviate = FALSE)
## S3 method for class 'datetimeoffset'
months(x, abbreviate = FALSE)
## S3 method for class 'datetimeoffset'
quarters(x, ...)
## S3 method for class 'datetimeoffset'
julian(x, origin = as.Date("1970-01-01"), ...)
Arguments
| x | A  | 
| abbreviate | Logical vector for whether the names should be abbreviated | 
| ... | Ignored | 
| origin | Length one datetime of origin | 
Details
We implement datetimeoffset() support for the following S3 methods from base:
-  weekdays()
-  months()
-  quarters()
-  julian()
There is also datetimeoffset() support for the following methods from lubridate:
-  isoyear()andepiyear()
-  quarter()andsemester()
-  week(),isoweek(), andepiweek()
-  wday()andwday<-()
-  qday()andqday<-()
-  yday()andyday<-()
-  am()andpm()
-  days_in_month()
-  dst()
-  leap_year()
Value
weekdays(), months(), quarters(), julian() return character vectors.
See base::weekdays() for more information.
Examples
dto <- datetimeoffset_now()
print(dto)
weekdays(dto)
months(dto)
quarters(dto)
julian(dto)
if (require("lubridate")) {
  cat("`isoyear(dto)`: ", isoyear(dto), "\n")
  cat("`epiyear(dto)`: ", epiyear(dto), "\n")
  cat("`semester(dto)`: ", semester(dto), "\n")
  cat("`quarter(dto)`: ", quarter(dto), "\n")
  cat("`week(dto)`: ", week(dto), "\n")
  cat("`isoweek(dto)`: ", isoweek(dto), "\n")
  cat("`epiweek(dto)`: ", epiweek(dto), "\n")
  cat("`wday(dto)`: ", wday(dto), "\n")
  cat("`qday(dto)`: ", qday(dto), "\n")
  cat("`yday(dto)`: ", yday(dto), "\n")
  cat("`am(dto)`: ", am(dto), "\n")
  cat("`pm(dto)`: ", pm(dto), "\n")
  cat("`days_in_month(dto)`: ", days_in_month(dto), "\n")
  cat("`dst(dto)`: ", dst(dto), "\n")
  cat("`leap_year(dto)`: ", leap_year(dto), "\n")
}