Решил сначала тут проконсультироваться.
Проблема мутная.
Исходная задача.
В провайдере для EFCore нужно замапить операцию вычитания TimeOnly из TimeOnly:
И тут внезапно оказывается, что сервер (PG, Firebird) для операции:
select time '01:00:00' - time '03:00:00'
возвращает отрицательное значение
-02:00:00.
А вычитание TimeOnly положительное:
22:00:00.
Ибо
/// <summary>
/// Gives the elapsed time between two points on a circular clock, which will always be a positive value.
/// </summary>
/// <param name="t1">The first TimeOnly instance.</param>
/// <param name="t2">The second TimeOnly instance..</param>
/// <returns>The elapsed time between t1 and t2.</returns>
public static TimeSpan operator -(TimeOnly t1, TimeOnly t2) => new TimeSpan((t1._ticks - t2._ticks + TimeSpan.TicksPerDay) % TimeSpan.TicksPerDay);
У меня собственно
вопрос — зачем они тут против ветра?
Моя логика какая — если А<B, то (А-B)<0.
А логику реализации вычитания TimeOnly догнать не могу.
По моему — это тупо бага.
Вот они пишут "Gives the elapsed
time between", ну так и возвращали бы TimeOnly.
А они возвращают
interval (TimeSpan).
Что думаете?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --