Кен, Деление на дни (1) даст вам то, что вы хотите. Lubridate не приводит периоды к продолжительности, когда вы делите интервалы по периодам. (Хотя алгоритм поиска точного числа целых периодов в интервале действительно начинается с оценки, которая использует интервал, разделенный на аналогичное количество длительностей, что может быть тем, что вы заметили).
Конечным результатом является количество целых периодов, которые соответствуют интервалу. Предупреждающее сообщение предупреждает пользователя о том, что это оценка, поскольку в ответе будет пропущена некоторая доля периода. Не имеет смысла делать математику с долей периода, так как мы не можем изменить время на нем, если мы не конвертируем его в кратные более короткого периода - но не будет последовательного способа сделать преобразование. Например, день, который вы упомянули, будет равен 23 часам, а другие дни будут равны 24 часам. Вы думаете правильно: периоды - это попытка уважать изменения, вызванные летним временем, високосными годами и т. Д., Но они делают это только как единое целое.
Я не могу воспроизвести ошибку в вычитании, которую вы упомянули выше. Кажется, это работает для меня.
three <- force_tz(ymd_hms("2011-03-12 12:00:00"), "")
# note: here in TX, "" *is* CST
(four <- three + days(1))
> [1] "2011-03-13 12:00:00 CDT"
four - days(1)
> [1] "2011-03-12 12:00:00 CST"