[Q] TimeOnly - TimeOnly --> всегда положительный TimeSpan
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 06.10.21 07:58
Оценка: +1
Решил сначала тут проконсультироваться.

Проблема мутная.

Исходная задача.

В провайдере для 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).

Что думаете?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.