格式化以查找在Windows中无效的星期几

时间:2013-09-22 23:10:30

标签: r datetime format datetime-format

我是R.的新手。我在工作时使用Windows PC,在家中使用Ubuntu Linux。我试图找出为什么我的代码在Windows R中不起作用。 我试图找到给定日期的一周(数字)。 使用格式format(Sys.time(), "%u")
它适用于Linux而不适用于Windows?我错过了什么,我从两台PC都添加了一个简单的代码和会话信息。

我的Windows 7 PC输出R 3.01

sessionInfo() 
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    
LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base  

format(Sys.time(), "%u") 
[1] ""   

Sys.time()  
[1] "2013-09-22 10:34:00 CDT"

我的LINUX PC输出R 3.01

sessionInfo()  
R version 3.0.1 (2013-05-16)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
[3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
[5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
[7] LC_PAPER=C                 LC_NAME=C                 
[9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
loaded via a namespace (and not attached)
[1] tools_3.0.1   

format(Sys.time(),"%u")  
[1] "7"   

Sys.time()  
[1] "2013-09-22 10:34:15 CDT" 

2 个答案:

答案 0 :(得分:7)

这是R(在Windows上)记录的行为。

有关详细信息,请参阅?strptime(我知道,可能不是您可能会想到的第一个地方;-),其中记录了R中可用的日期 - 时间转换规范。详细信息 ,在所有操作系统上找到的初始规范列表后面跟着一个部分:

  

也在当前标准中定义,但实施较少    (例如,不适用于Windows上的输出)

     

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

     

[。 。 。许多剪断的线条。 。 ]

     

'%u'工作日为十进制数字(1-7,星期一为1)。

     

[。 。 。更多剪断的线条。 。 ]

format中最接近的替代品是:

  

%w工作日为十进制数(0-6,星期日为0)。

     

%a当前语言环境中缩写的工作日名称。 (也匹配完整   输入名称。)

     

%当前区域设置中的完整工作日名称。 (也匹配缩写   输入名称。)

答案 1 :(得分:5)

您可以查看包ISOweekday()中的ISOweek功能:
“此函数根据ISO 8601返回给定日期的工作日。它可替代Windows上未实现的”%u“格式。”

ISOweekday("2013-09-24 01:42:23")
# [1] 2