R3.0.3 和 R3.1.3 中的日期时间格式

Datetime formatting in R3.0.3 and R3.1.3

我在 CRAN 上有一个名为 UNF 的包,它创建了一个 data.frame 的散列(用于数据引用)。我在包中有一些与日期时间格式相关的测试(我正在使用 testthat)。它们在当前版本的 R (3.1.3) 上正常工作,但是一旦我提交给 CRAN,one of these tests fail on "r-oldrel-windows" (3.0.3).

我已经追踪到以下代码的差异,它在两个版本的 R 中产生不同的结果。这是正确的输出(来自 3.1.3):

x = strptime("2014-08-22T16:51:05Z", "%FT%H:%M:%OSZ", tz="UTC")
x
# [1] "2014-08-22 16:51:05 UTC"
strftime(x, "%F")
# [1] "2014-08-22"

这是 3.0.3 的输出:

x = strptime("2014-08-22T16:51:05Z", "%FT%H:%M:%OSZ", tz="UTC")
x
# [1] "2014-08-22 16:51:05 UTC"
strftime(x, "%F")
# [1] ""

如您所见,strftime 的输出是一个空字符串,而不是 ISO 8601 格式的日期。知道这两个版本之间有什么变化吗?我该如何纠正呢?或者,如何避免 CRAN 上的测试失败?

可能 %F 在早期版本的 R 中不是一个选项。因此基本代码忽略了该字符串,因此它被格式化为空字符串。我尝试使用当前帮助中没有的字母,它 returns 一个字符串,该字母不是日期。

Thomas,testthat 中有一个 skip() 函数和 skip_on_CRAN 功能。

  1. 看看帮助

    ?testthat::skip_on_cran
    
  2. wbeasleysome test code which may assist you. (See his helpful comments in this answer to Rappster in 25595487)。您将看到他如何将这个跳过命令放在函数括号内。解释如下:

    library(testthat)        
    
    testthat("example"),{
      testthat::skip_on_cran()
      # test code below
      x <-2
      expect_equal(x,2)
    })
    
  3. 这可能是 OS 与 Windows 的事情。做更多的挖掘揭示了这一点——看看这个描述 R 3.0.2 的内容。 http://www.inside-r.org/r-doc/base/strftime

    文档警告 Windows 中某些 % 标志存在一些问题。引用(我的粗体):

Also defined in the current standards but less widely implemented (e.g. not for output on Windows) are

%C Century (00--99): the integer part of the year divided by 100.

...

%F Equivalent to %Y-%m-%d (the ISO 8601 date format).

...

希望对您有所帮助!