R中的Strptime在添加秒时不返回预期结果

时间:2016-12-15 12:14:36

标签: r

在工作中,我们最近在我们的代码中发现了一个不寻常的行为,我已经将它钉在了下面的语句中,其值为FALSE,它应该为TRUE:

! strptime(strftime((strptime(d, "%Y-%m-%d")+3600*24),"%Y-%m-%d"),"%Y-%m-%d")%in%strptime(VsiB[,1],"%Y-%m-%d")

VsiB是某些日期和值的数据框:

    DATEFROM    VALUE 
    1 2016-12-15 59.43073 
    2 2016-12-16 62.78324 
    3 2016-12-19 54.06673 
    4 2016-12-26 50.50698 
    5 2017-01-02 51.20186 
    6 2017-01-09 52.52000 
    7 2016-12-17 52.72573 

和d是此数据框的日期(此情况下的问题发生在d = 2016-12-17)。 如果d的下一个日期包含在数据帧VsiB中,则此语句基本上是检查。嗯,在这种情况下,它是不可能的。

真正好奇的部分是,对于所有其他国家(我们循环了24个国家/地区的整个代码,其中5个使用与发生错误的国家/地区完全相同的数据),该声明是的。

直到今天它也只发生过两次,即使我们每天都运行两次。

我们能想到的唯一解释是

 strptime(strftime((strptime(d, "%Y-%m-%d")+3600*24),"%Y-%m-%d")

没有添加一天(注意+ 3600 * 24)到d。例如,

 strptime(strftime((strptime(d, "%Y-%m-%d")+3600*24-epsilon),"%Y-%m-%d")

对于epsilon> 0,将获得d,而不是d + 1。所以我的问题是,如果有可能某些外部条件,如系统时间等,可能会使计算失真,那会发生吗?

PS:我知道as.Date(d)+1会以优雅的方式解决它,但我仍然很好奇,如果strptime可能无法正常工作(加上任何改变都可能导致问题。 )。

  

Sys.timezone()   [1]“欧洲/布拉格”   sessionInfo()   R版本3.1.2(2014-10-31)   平台:x86_64-w64-mingw32 / x64(64位)

     

区域设置:

     

[1] LC_COLLATE = Slovenian_Slovenia.1250 LC_CTYPE = Slovenian_Slovenia.1250
  [3] LC_MONETARY = Slovenian_Slovenia.1250 LC_NUMERIC = C
  [5] LC_TIME = Slovenian_Slovenia.1250

     

附加基础包:   [1] stats graphics grDevices utils数据集方法库

     

通过命名空间加载(而不是附加):   [1] rsconnect_0.4.3 tools_3.1.2

数据

VsiB <- structure(list(DATEFROM = structure(c(17150, 17151, 17154, 17161, 
17168, 17175, 17152), class = "Date"), VALUE = c(59.43073, 62.78324, 
54.06673, 50.50698, 51.20186, 52.52, 52.72573)), .Names = c("DATEFROM", 
"VALUE"), class = "data.frame", row.names = c(NA, -7L))

0 个答案:

没有答案