Информация об изменениях

Сообщение Re[5]: Crossing midnight от 13.10.2021 22:41

Изменено 13.10.2021 22:44 Qbit86

Re[5]: Crossing midnight
Здравствуйте, Kolesiki, Вы писали:

K>С чего ты (за всех) решил, что программист хочет "попасть из точки 3 в точку 1"?


Это решил не я, а разработчики API для конкретных сценариев:

A TimeOnly is ideal for scenarios such as recurring meeting times, daily alarm clock times, or the times that a business opens and closes each day of the week.


A common operation with time-of-day values is to add or subtract some period of elapsed time. Unlike TimeSpan, a TimeOnly value will correctly handle such operations when crossing midnight. For example, an employee’s shift might start at 18:00 and last for 8 hours, ending at 02:00. TimeOnly will take care of that during the addition operation, and it also has an InBetween method that can easily be used to tell if any given time is within the worker’s shift.
https://devblogs.microsoft.com/dotnet/date-time-and-time-zone-enhancements-in-net-6/#the-timeonly-type


K>Если запросили "1 — 3", это всегда -2.


Для такой семантики уже существует тип TimeSpan, зачем делать его клон?

K>И чего ты там свои минуса кидаешь, болезный?


Здесь ты нагло злоупотребляешь неактивностью модераторов.

K>Это как раз типичная ошибка мелкомягких брахмапутр — "думать за всех", причём как им лично кажется правильным. На деле, вместо ОЖИДАЕМОГО правильного ответа они вкорячивают логику какого-то гика, который и программ-то ни разу не писал! Это второй косяк мелкомягкой банды — они пишут библиотеки, нихрена не делая в поле прикладных приложений. Как так можно проектировать?? Реальные кейсы использования нельзя придумать, ковыряя в носу перед белой доской из офиса компании.


Отсутствие у тебя фантазии и опыта не означает, что никто не сталкивался с «реальными кейсами». Я сталкивался. Например, нужно посчитать продолжительность «ночи» для пользователя, и попадает ли туда момент планируемой нотификации. Промежуток времени, когда пользователь обычно спит, задаётся началом и концом. В моём случае pre-net6.0 для этого используется TimeSpan, и нужны дополнительные приседания для обработки разных сценариев, когда промежуток захватывает полночь (23:30–07:30) или нет (01:00—09:00). В net6.0 это делается просто и естественно:
TimeOnly start = new(23, 30);
TimeOnly end = new(7, 30);
TimeSpan duration = end - start;
Console.WriteLine(duration.ToString()); // 08:00:00


K>вместо ОЖИДАЕМОГО правильного ответа


В этом примере ОЖИДАЕМЫЙ правильный ответ 08:00:00, а не -16.00:00:00.

Если же нужна семантика с «направленным расстоянием», то к ней всегда легко можно вернуться через timeOnly.ToTimeSpan().
TimeOnly start = new(23, 30);
TimeOnly end = new(7, 30);
TimeSpan duration = end.ToTimeSpan() - start.ToTimeSpan();
Console.WriteLine(duration.ToString()); // -16.00:00:00
Re[5]: Crossing midnight
Здравствуйте, Kolesiki, Вы писали:

K>С чего ты (за всех) решил, что программист хочет "попасть из точки 3 в точку 1"?


Это решил не я, а разработчики API для конкретных сценариев:

A TimeOnly is ideal for scenarios such as recurring meeting times, daily alarm clock times, or the times that a business opens and closes each day of the week.


A common operation with time-of-day values is to add or subtract some period of elapsed time. Unlike TimeSpan, a TimeOnly value will correctly handle such operations when crossing midnight. For example, an employee’s shift might start at 18:00 and last for 8 hours, ending at 02:00. TimeOnly will take care of that during the addition operation, and it also has an InBetween method that can easily be used to tell if any given time is within the worker’s shift.
https://devblogs.microsoft.com/dotnet/date-time-and-time-zone-enhancements-in-net-6/#the-timeonly-type


K>Если запросили "1 — 3", это всегда -2.


Для такой семантики уже существует тип TimeSpan, зачем делать его клон?

K>И чего ты там свои минуса кидаешь, болезный?


Здесь ты нагло злоупотребляешь неактивностью модераторов.

K>Это как раз типичная ошибка мелкомягких брахмапутр — "думать за всех", причём как им лично кажется правильным. На деле, вместо ОЖИДАЕМОГО правильного ответа они вкорячивают логику какого-то гика, который и программ-то ни разу не писал! Это второй косяк мелкомягкой банды — они пишут библиотеки, нихрена не делая в поле прикладных приложений. Как так можно проектировать?? Реальные кейсы использования нельзя придумать, ковыряя в носу перед белой доской из офиса компании.


Отсутствие у тебя фантазии и опыта не означает, что никто не сталкивался с «реальными кейсами». Я сталкивался. Например, нужно посчитать продолжительность «ночи» для пользователя, и попадает ли туда момент планируемой нотификации. Промежуток времени, когда пользователь обычно спит, задаётся началом и концом. В моём случае pre-net6.0 для этого используется TimeSpan, и нужны дополнительные приседания для обработки разных сценариев, когда промежуток захватывает полночь (23:30–07:30) или нет (01:00—09:00). В net6.0 это делается просто и естественно:
TimeOnly start = new(23, 30);
TimeOnly end = new(7, 30);
TimeSpan duration = end - start;
Console.WriteLine(duration.ToString()); // 08:00:00


K>вместо ОЖИДАЕМОГО правильного ответа


В этом примере ОЖИДАЕМЫЙ правильный ответ 08:00:00, а не -16:00:00.

Если же нужна семантика с «направленным расстоянием», то к ней всегда легко можно вернуться через timeOnly.ToTimeSpan().
TimeOnly start = new(23, 30);
TimeOnly end = new(7, 30);
TimeSpan duration = end.ToTimeSpan() - start.ToTimeSpan();
Console.WriteLine(duration.ToString()); // -16.00:00:00