На наш взгляд, мы сразу видим (учитывая, что мы пишем это в 2018 году), что 30-09-18
означает 30 сентября 2018 года нашей эры;компьютер (то есть R), однако, нуждается в некоторой помощи (как заключено в строку format
).
Вы сказали, что последняя часть вашего ввода %Y
-форматирована;поэтому он интерпретируется согласно инструкциям в ?strptime
:
Год с веком .[...]
Итак, R видит 30-09-18
и думает «30 сентября 18 г. н.э.».Конечно, это было давным-давно:
as.Date("30-09-18", format="%d-%m-%Y") - as.Date('2018-09-12')
# Time difference of -730467 days
Это должно быть около 2000 лет назад, верно?
730467/365.25 # rudimentary accounting for leap years/centuries
# [1] 1999.91
Чтобы исправить проблему, удобная Ctrl F на ?strptime
для year
может помочь определить правильный вариант, %y
:
Год без века (00–99
).На входе значения 00
до 68
начинаются с префикса 20
и 69
до 99
с 19
- это поведение, указанное в стандартах POSIX 2004 и 2008 годов, но они также говорят:ожидается, что в будущей версии столетие по умолчанию, выведенное из двухзначного года, изменится ».
А затем ожидаемый результат:
as.Date("30-09-18", format="%d-%m-%y") - as.Date('2018-09-12')
# Time difference of 18 days
Урок, всегда двойной/ Тройная проверка руководства ?strptime
при обнаружении неожиданного поведения ... Говоря по опыту!