Как считаете, правильно ли ведут себя эти функции?
Внутри они используют что-то вроде duration_cast<seconds>. Но в случае большей точности это значит что функция немного по разному обрабатывает время до и после epoch.
Для отрицательных значений это будет ceil, а для положительных floor: