tests/datetime.R

library(datapackage)
source("helpers.R")

# === NO FORMAT
fielddescriptor <- list(
  name = "datetime",
  title = "A datetime field",
  description = "A description",
  type = "datetime"
)
res <- dp_to_datetime(c("2020-01-01T12:13", "2022-12-31T12:13:14,15", "", NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, as.POSIXct(c("2020-01-01 12:13:00", "2022-12-31 12:13:14.15", NA, NA)), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)
suppressWarnings(expect_error(
  dp_to_datetime(c("2022/01/01 14:12", "2024/01/31 12:23:12", "", NA), fielddescriptor = fielddescriptor)
))

# === DEFAULT FORMAT
fielddescriptor <- list(
  name = "datetime",
  title = "A datetime field",
  description = "A description",
  type = "datetime",
  format = "default"
)
res <- dp_to_datetime(c("2020-01-01T12:13", "2022-12-31T12:13:14,15", "", NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, as.POSIXct(c("2020-01-01 12:13:00", "2022-12-31 12:13:14.15", NA, NA)), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)
suppressWarnings(expect_error(
  dp_to_datetime(c("2022/01/01 14:12", "2024/01/31 12:23:12", "", NA), fielddescriptor = fielddescriptor)
))

# === ANY FORMAT
fielddescriptor <- list(
  name = "datetime",
  title = "A datetime field",
  description = "A description",
  type = "datetime",
  format = "any"
)
res <- dp_to_datetime(c("2020/01/01 12:13", "2022/12/31 12:13:14,15", "", NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, as.POSIXct(c("2020-01-01 12:13:00", "2022-12-31 12:13:14.15", NA, NA)), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)

# === %Y%M.. FORMAT
fielddescriptor <- list(
  name = "datetime",
  title = "A datetime field",
  description = "A description",
  type = "datetime",
  format = "%m/%d/%Y %H:%M:%S"
)
res <- dp_to_datetime(c("01/01/2020 12:13:00", "12/31/2022 12:13:14.15", "", NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, as.POSIXct(c("2020-01-01 12:13:00", "2022-12-31 12:13:14.15", NA, NA)), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)
suppressWarnings(expect_error(
  dp_to_datetime(c("2022/01/01 14:12", "2024/01/31 12:23:12", "", NA), fielddescriptor = fielddescriptor)
))

# === NO FIELDDESCRIPTOR
fielddescriptor <- list(
  type = "datetime"
)
res <- dp_to_datetime(c("2020-01-01T12:13", "2022-12-31T12:13:14,15", "", NA))
expect_equal(res, as.POSIXct(c("2020-01-01 12:13:00", "2022-12-31 12:13:14.15", NA, NA)), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)
suppressWarnings(expect_error(
  dp_to_datetime(c("2022/01/01 14:12", "2024/01/31 12:23:12", "", NA), fielddescriptor = fielddescriptor)
))


# === MISSINGVALUES
fielddescriptor <- list(
  name = "datetime",
  title = "A datetime field",
  description = "A description",
  type = "datetime",
  missingValues = "--"
)
res <- dp_to_datetime(c("2020-01-01T12:13", "2022-12-31T12:13:14,15", "--", NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, as.POSIXct(c("2020-01-01 12:13:00", "2022-12-31 12:13:14.15", NA, NA)), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)
suppressWarnings(expect_error(
  res <- dp_to_datetime(c("2020-01-01T12:13", "2022-12-31T12:13:14,15", "", NA), 
    fielddescriptor = fielddescriptor)
))
suppressWarnings(expect_error(
  res <- dp_to_datetime(c("2020-01-01T12:13", "2022-12-31T12:13:14,15", "---", NA), 
    fielddescriptor = fielddescriptor)
))


# === NUMERIC
res <- dp_to_datetime(0)
expect_equal(res, as.POSIXct("1970-01-01 00:00:00", tz = "GMT"), attributes = FALSE)
expect_attribute(res, "fielddescriptor", list(type = "datetime"))

# === DATE
res <- dp_to_datetime(as.POSIXlt("1970-01-01 00:00"))
expect_equal(res, as.POSIXct("1970-01-01 00:00:00"), attributes = FALSE)
expect_attribute(res, "fielddescriptor", list(type = "datetime"))


# =============================================================================
# csv_colclass
res <- datapackage:::csv_colclass_datetime() 
expect_equal(res, "character")

res <- datapackage:::csv_colclass(list(type = "datetime")) 
expect_equal(res, "character")


# =============================================================================
# csv_format

if ("CET" %in% OlsonNames()) {
  res <- datapackage:::csv_format_datetime(as.POSIXct("2020-01-01 12:30:00", tz = "CET"))
  expect_equal(res, "2020-01-01T12:30:00+01:00")
}

res <- datapackage:::csv_format_datetime(as.POSIXct("2020-01-01 12:30:00", tz = "GMT"))
expect_equal(res, "2020-01-01T12:30:00Z")

fielddescriptor <- list(
    type = "datetime",
    format = "default"
  )
res <- datapackage:::csv_format(as.POSIXct(c("2020-01-01 12:30:00", NA), tz = "GMT"), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c("2020-01-01T12:30:00Z", NA))

fielddescriptor <- list(
    type = "datetime",
    format = "any"
  )
res <- datapackage:::csv_format(as.POSIXct(c("2020-01-01 12:30:00", NA), tz = "GMT"), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c("2020-01-01T12:30:00Z", NA))

fielddescriptor <- list(
    type = "datetime",
    format = "%Y %M"
  )
res <- datapackage:::csv_format(as.POSIXct(c("2020-01-01 12:30:00", NA), tz = "GMT"), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c("2020 30", NA))

fielddescriptor <- list(
    type = "datetime",
    format = "default",
    missingValues = ""
  )
res <- datapackage:::csv_format(as.POSIXct(c("2020-01-01 12:30:00", NA), tz = "GMT"), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c("2020-01-01T12:30:00Z", ""))
djvanderlaan/datapackage documentation built on June 12, 2025, 2:44 a.m.