将R格式的字符格式转换为日期格式,前20年而不是19年

问题描述

我需要使用lubridate将dob列的fctr格式(例如4/11/64)转换为Marriage内置数据集中的日期格式。我尝试了很多函数,例如strptime,as_date等,但是4/11/64更改为2064年,这对于1964年出生的人来说是不正确的。是否有一个函数可以自动将年份转换为19xx?还是我必须先将字符格式的前导“ 19”放在字符格式之前?

解决方法

我认为您必须自己添加“ 19”,除非您想使用 if (task.isSuccessful()) { //verify UID here Toast.makeText(context,"Verification Complete",Toast.LENGTH_SHORT).show(); isVerified=true; Intent intent = new Intent(context,UserDashboard.class); startActivity(intent); finish(); } else { Toast.makeText(context,"Verification Faild: OTP wrong",Toast.LENGTH_SHORT).show(); } } });

hydrostats::four.digit.year

(该函数只有几行,所以如果您不想依赖软件包,可以复制它)

hydrostats::four.digit.year(dmy("4/11/64"),year=1900)

否则,您将陷入POSIX标准的困境。 function (x,year = 1968) { n <- as.numeric(strftime(x,format = "%y"))%%100 Y <- ifelse(n > year%%100,1900 + n,2000 + n) return(Y) } 是用于转换两位(或一位)年份以及从"%y"开始的标准标记:

“%y”无世纪的年份(00-99)。输入时,值00到68为 以20和69为前缀,以19为99前缀-这就是行为 由2018 POSIX标准指定,但它也表示 ‘预计在将来的版本中,默认世纪 从两位数年份推断出的值会发生变化。”

该标准本身可用here

如果未指定世纪,则[69,99]范围内的值应指1969年至1999年,包括[00,68]范围内的值应指2000年至2068年(包括在内)。

另请参阅:why strptime for two digit year for 69 returns 1969 in python?