tests/testthat/test-getset-clock.r

test_that("getters", {
    dt <- as_datetimeoffset("1918-11-11T11:11:11")
    expect_equal(get_year(dt), 1918L)
    expect_equal(get_month(dt), 11L)
    expect_equal(get_day(dt), 11L)
    expect_equal(get_hour(dt), 11L)
    expect_equal(get_minute(dt), 11L)
    expect_equal(get_second(dt), 11L)
    expect_equal(get_nanosecond(dt), NA_integer_)
    expect_equal(get_hour_offset(dt), NA_integer_)
    expect_equal(get_minute_offset(dt), NA_integer_)
    expect_equal(get_tz(dt), NA_character_)

    skip_if_not("Europe/Paris" %in% OlsonNames())
    dts <- "1918-11-11T11:11:11+00:00[Europe/Paris]"
    dt <- as_datetimeoffset(dts)
    expect_equal(get_hour_offset(dt), 0L)
    expect_equal(get_minute_offset(dt), 0L)
    expect_equal(get_tz(dt), "Europe/Paris")
    expect_equal(get_tz(clock::zoned_time_now(Sys.timezone())), Sys.timezone())

    expect_equal(get_hour_offset(dts), 0L)
    expect_equal(get_minute_offset(dts), 0L)

    expect_equal(get_tz(Sys.Date()), NA_character_)

    skip_if_not_installed("lubridate")
    expect_equal(lubridate::tz(dt), "Europe/Paris")
    expect_equal(lubridate::year(dt), 1918L)
    expect_equal(lubridate::month(dt), 11L)
    expect_equal(as.character(lubridate::month(dt, label = TRUE)),
                 "Nov")
    expect_equal(as.character(lubridate::month(dt, label = TRUE, abbr = FALSE)),
                 "November")
    expect_equal(lubridate::day(dt), 11L)
    expect_equal(lubridate::hour(dt), 11L)
    expect_equal(lubridate::minute(dt), 11L)
    expect_equal(lubridate::second(dt), 11L)
    expect_equal(lubridate::date(dt), as.Date(dt))
})

test_that("setters", {
    dt <- NA_datetimeoffset_
    dt <- set_year(dt, 1918L, na_set = TRUE)
    dt <- set_month(dt, 11L)
    expect_equal(get_day(set_day(dt, "last")), 30L)
    expect_equal(get_day(set_day(datetimeoffset(2001, NA_integer_), "last")),
                 NA_integer_)
    dt <- set_day(dt, 11L)
    dt <- set_hour(dt, 11L)
    dt <- set_minute(dt, 11L)
    dt <- set_second(dt, 11L)
    dt <- set_nanosecond(dt, NA_integer_)
    dt <- set_tz(dt, "Europe/Paris")
    dt <- set_hour_offset(dt, 0L)
    dt <- set_minute_offset(dt, 0L)
    expect_equal(format(dt), "1918-11-11T11:11:11+00:00[Europe/Paris]")

    dt <- set_nanosecond(dt, 123456789)
    dt <- set_subsecond_digits(dt, 4L)
    expect_equal(format(dt), "1918-11-11T11:11:11.1234+00:00[Europe/Paris]")

    expect_equal(get_subsecond(dt, 1L), 1L)
    expect_equal(get_subsecond(dt, 2L), 12L)
    expect_equal(get_subsecond(dt, 3L), 123L)
    expect_equal(get_subsecond(dt, 9L), 123456789L)

    expect_equal(get_subsecond_digits(Sys.time()), 6L)

    dt <- as_datetimeoffset("2020-01-01T10:10:10")
    dts <- datetime_widen(dt, precision = c("decisecond", "centisecond", "millisecond",
                                            "hundred microseconds", "ten microseconds", "microsecond",
                                            "hundred nanoseconds", "ten nanoseconds", "nanosecond"))
    expect_equal(format(dts),
                 c("2020-01-01T10:10:10.0",
                   "2020-01-01T10:10:10.00",
                   "2020-01-01T10:10:10.000",
                   "2020-01-01T10:10:10.0000",
                   "2020-01-01T10:10:10.00000",
                   "2020-01-01T10:10:10.000000",
                   "2020-01-01T10:10:10.0000000",
                   "2020-01-01T10:10:10.00000000",
                   "2020-01-01T10:10:10.000000000"))

    expect_equal(get_tz(Sys.time()), "")

    expect_error(set_hour_offset("Boo", 0L))
    expect_error(set_minute_offset("Boo", 0L))

    dt <- as_datetimeoffset("1918-11-11T11:11:11.123456789")
    expect_equal(get_millisecond(dt), 123L)
    expect_equal(get_microsecond(dt), 123456L)
    dt <- set_millisecond(dt, 123L)
    expect_equal(format(dt), "1918-11-11T11:11:11.123")
    dt <- set_microsecond(dt, 123456L)
    expect_equal(format(dt), "1918-11-11T11:11:11.123456")

    dt <- set_subsecond(dt, 1234, 4L)
    expect_equal(format(dt), "1918-11-11T11:11:11.1234")
})

test_that("setters for {clock}", {
    skip_if_not(all(c("America/Los_Angeles", "America/New_York") %in% OlsonNames()))
    ymd <- clock::year_month_day(2020, 10, 10, 10, 10, 10)
    nt <- clock::as_naive_time(ymd)
    zt <- clock::as_zoned_time(nt, "America/Los_Angeles")
    zt2 <- set_tz(zt, "America/New_York")
    expect_equal(format(zt2), "2020-10-10T10:10:10-04:00[America/New_York]")
})

test_that("setters for {lubridate}", {
    skip_if_not_installed("lubridate")
    dt <- set_tz(Sys.time(), "GMT")
    expect_equal(get_tz(dt), "GMT")
    expect_equal(get_hour_offset(dt), 0L)
    expect_equal(get_minute_offset(dt), 0L)

    dt <- datetimeoffset(2000L)
    lubridate::year(dt) <- 1918L
    lubridate::month(dt) <- 11L
    lubridate::day(dt) <- 11L
    lubridate::hour(dt) <- 11L
    lubridate::minute(dt) <- 11L
    lubridate::second(dt) <- 11L
    lubridate::date(dt) <- as.Date("1918-11-11")
    dt <- set_nanosecond(dt, NA_integer_)
    dt <- set_tz(dt, "Europe/Paris")
    dt <- set_hour_offset(dt, 0L)
    dt <- set_minute_offset(dt, 0L)
    expect_equal(format(dt), "1918-11-11T11:11:11+00:00[Europe/Paris]")

    skip_if_not_installed("lubridate", "1.8.0.9000") # generic `force_tz()`
    lubridate::tz(dt) <- "Europe/Paris"
    expect_equal(format(dt), "1918-11-11T11:11:11+00:00[Europe/Paris]")
})

Try the datetimeoffset package in your browser

Any scripts or data that you put into this service are public.

datetimeoffset documentation built on April 4, 2025, 4:42 a.m.