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

Tho*_*mas 12 datetime r strftime cran

我在CRAN上有一个名为UNF的包,它创建了一个哈希data.frame(用于数据引用).我在包中与日期时间格式相关的一些测试(我正在使用testthat).它们在当前版本的R(3.1.3)上正常工作,但是一旦我提交给CRAN,其中一个测试就失败了"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"
Run Code Online (Sandbox Code Playgroud)

这是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] ""
Run Code Online (Sandbox Code Playgroud)

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

mic*_*str 2

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

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

  1. 看看帮助

    ?testthat::skip_on_cran
    
    Run Code Online (Sandbox Code Playgroud)
  2. wbeasley一些测试代码可以帮助您。(请参阅他在25595487中对 Rappster 的回答中的有用评论)。您将看到他如何将此跳过命令放在 testthat 函数括号内。转述如下:

    library(testthat)        
    
    testthat("example"),{
      testthat::skip_on_cran()
      # test code below
      x <-2
      expect_equal(x,2)
    })
    
    Run Code Online (Sandbox Code Playgroud)
  3. 这可能是 Windows 操作系统的问题。进一步挖掘揭示了这一点 - 看看描述 R 3.0.2 的内容。http://www.inside-r.org/r-doc/base/strftime

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

也在当前标准中定义但不太广泛实现(例如不适用于 Windows 上的输出

%C 世纪(00--99):年份的整数部分除以100。

...

%F 相当于 %Y-%m-%d(ISO 8601 日期格式)。

...

希望这可以帮助!