簡體   English   中英

日期導入,錯誤的世紀

[英]date import, incorrect century

我有一堆要解析的日期,格式為“%m /%d /%y”。 as.Date(dates, format = "%m/%d/%y")會將“ 1/01/64”之類的日期轉換為“ 2064-01-01”,但我需要將該日期設置為“ 1964-01-01” “。 我想我可以找到將來的年份,然后減去一個世紀的實例,但這似乎有點荒謬。

日期在內部存儲為整數天,因此在輸入或輸出時只有這種格式。 至於沒有世紀信息的輸入,我認為您很不走運。 這是?strptime關於%y格式規范的內容:“在輸入時,值00到68以20為前綴,69到99以19為前綴–這是2004和2008 POSIX標准指定的行為,但是它們也說'預計在將來的版本中,從兩位數年份推斷出的默認世紀將會改變。”

  as.Date( "01/01/64", "%m/%d/%y", origin="1970-01-01") -100*365.25
  #[1] "1964-01-01"

鑒於Y2K過去是最近的,因此有可能針對允許刪除世紀信息的程序員展開一場爭斗。

由於默認假設00-68年為2000-2068,因此肯定可以創建as.Dateshift

固定日期的另一種方法是更改​​將來發生的所有年份(使用Sys.Date()相對於今天的日期)從19開始而不是20。

dates=as.Date(c("01/01/64", "12/31/15"))
# [1] "2064-01-01" "2015-12-31" ## contains an incorrect date

## Now correct the dates that havn't yet occurred
as.Date(ifelse(dates > Sys.Date(), format(dates, "19%y-%m-%d"), format(dates)))
#[1] "1964-01-01" "2015-12-31"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM