DateTime.MinValue или null?
От: merge  
Дата: 04.10.10 09:30
Оценка:
Привет!

Есть фильтр, где юзер вбивает даты начала и окончания для поиска.
Если юзер не вбил любую или обе из дат, то интервал открыт для поиска.

Вот что по вашему лучше передавать в качестве даты в данном случае DateTime.MinValue или null?
Re: DateTime.MinValue или null?
От: Aen Sidhe Россия Просто блог
Дата: 04.10.10 09:32
Оценка: +5
Здравствуйте, merge, Вы писали:

M>Вот что по вашему лучше передавать в качестве даты в данном случае DateTime.MinValue или null?


Зависит от организации и привычек. Я предпочитаю null.
С уважением, Анатолий Попов.
ICQ: 995-908
Re: DateTime.MinValue или null?
От: fddima  
Дата: 04.10.10 09:33
Оценка:
Здравствуйте, merge, Вы писали:

M>Есть фильтр, где юзер вбивает даты начала и окончания для поиска.

M>Если юзер не вбил любую или обе из дат, то интервал открыт для поиска.
M>Вот что по вашему лучше передавать в качестве даты в данном случае DateTime.MinValue или null?
На мой вкус — лучше null. Т.е использовать Nullable<DateTime>.
Re: DateTime.MinValue или null?
От: Temoto  
Дата: 04.10.10 11:14
Оценка: +1
M>Есть фильтр, где юзер вбивает даты начала и окончания для поиска.
M>Если юзер не вбил любую или обе из дат, то интервал открыт для поиска.

M>Вот что по вашему лучше передавать в качестве даты в данном случае DateTime.MinValue или null?


Если юзер "не вбил", то и передавать ничего не нужно.
Re: DateTime.MinValue или null?
От: andy1618 Россия  
Дата: 04.10.10 12:17
Оценка: 33 (1)
Здравствуйте, merge, Вы писали:

M>Есть фильтр, где юзер вбивает даты начала и окончания для поиска.

M>Если юзер не вбил любую или обе из дат, то интервал открыт для поиска.

M>Вот что по вашему лучше передавать в качестве даты в данном случае DateTime.MinValue или null?


В данном случае "волшебные" значения (DateTime.MinValue, DateTime.MaxValue) плохи тем, что они могут "испортиться" при преобразованиях из UTC в LocalTime или обратно:
DateTime dt = DateTime.MinValue;            // {01.01.0001 00:00:00}
Console.WriteLine(dt == DateTime.MinValue); // True
dt = dt.ToLocalTime();                      // {01.01.0001 03:00:00} 
Console.WriteLine(dt == DateTime.MinValue); // False


А такое очень даже возможно в распределённых приложениях, например, клиентская программа находится в Москве в поясе UTC+3, а центральная БД, к которой идут запросы — в Лондоне с поясом UTC+0.

Резюме: как и сказали предыдущие ораторы, более надёжно будет использовать null.
Re[2]: DateTime.MinValue или null?
От: WolfHound  
Дата: 04.10.10 20:17
Оценка: 7 (3) +2
Здравствуйте, andy1618, Вы писали:

A>А такое очень даже возможно в распределённых приложениях, например, клиентская программа находится в Москве в поясе UTC+3, а центральная БД, к которой идут запросы — в Лондоне с поясом UTC+0.

Это все по тому что индус который делал эти классы не удосужился подумать головой.
Единственно верный способ реализовать DateTime это зафиксировать некую точку во времени.
Например 01.01.2000 00:00:00 UTC+0
Или любую другую по вкусу.
И отсчитывать от этой точки колличество наносекунд.
Если больше 0 то дата после нашего начала времен. Если меньше то до.
А преобразование в строку и обратно должен делать объект календарь который уже будет учитывать всякие там часовые пояса, весокосные года, прыгающие секунды и что там еще есть...
В этом случае внутри программы вообще никаких преобразований времени не будет. И все локальности будут только на уровне пользовательского интерфейса.

A>Резюме: как и сказали предыдущие ораторы, более надёжно будет использовать null.

Это не более надежно.
По другому просто нельзя.
Ибо если нет значения это нужно указать явно.
Причем лучше всего отразить это дело в типе объекта. Option<DateTime> правда чтобы работать в таком стиле нужно язык поумнее чем C#.
Но на худой конец Nullable тоже сойдет.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: DateTime.MinValue или null?
От: _FRED_ Черногория
Дата: 06.10.10 10:03
Оценка:
Здравствуйте, WolfHound, Вы писали:

A>>А такое очень даже возможно в распределённых приложениях, например, клиентская программа находится в Москве в поясе UTC+3, а центральная БД, к которой идут запросы — в Лондоне с поясом UTC+0.

WH>Это все по тому что индус который делал эти классы не удосужился подумать головой.
WH>Единственно верный способ реализовать DateTime это зафиксировать некую точку во времени.
<…>
WH>А преобразование в строку и обратно должен делать объект календарь который уже будет учитывать всякие там часовые пояса, весокосные года, прыгающие секунды и что там еще есть...

Так в BCL именно так и сделано?
Help will always be given at Hogwarts to those who ask for it.
Re[2]: DateTime.MinValue или null?
От: _FRED_ Черногория
Дата: 06.10.10 10:06
Оценка:
Здравствуйте, andy1618, Вы писали:

M>>Есть фильтр, где юзер вбивает даты начала и окончания для поиска.

M>>Если юзер не вбил любую или обе из дат, то интервал открыт для поиска.
M>>Вот что по вашему лучше передавать в качестве даты в данном случае DateTime.MinValue или null?

A>В данном случае "волшебные" значения (DateTime.MinValue, DateTime.MaxValue) плохи тем, что они могут "испортиться" при преобразованиях из UTC в LocalTime или обратно:

A>
A>DateTime dt = DateTime.MinValue;            // {01.01.0001 00:00:00}
A>Console.WriteLine(dt == DateTime.MinValue); // True
A>dt = dt.ToLocalTime();                      // {01.01.0001 03:00:00} 
A>Console.WriteLine(dt == DateTime.MinValue); // False
A>

A>А такое очень даже возможно в распределённых приложениях, например, клиентская программа находится в Москве в поясе UTC+3, а центральная БД, к которой идут запросы — в Лондоне с поясом UTC+0.
A>Резюме: как и сказали предыдущие ораторы, более надёжно будет использовать null.

А кто-то автоматически без ведома программиста преобразованиями занимается? По сути
A>dt = dt.ToLocalTime();                      // {01.01.0001 03:00:00}

есть просто изменение значения переменной aka
A>dt = dt.AddHours(hours);

и ни скакой стати теперь сравнивать
dt == DateTime.MinValue

нельзя.

Другое дело, что из-за наличия Kind в DateTime () некоторые [якобы] умные системы начинают сами преобразованиями некими заниматься. Дык это проблема систем, а не DateTime.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: DateTime.MinValue или null?
От: _FRED_ Черногория
Дата: 06.10.10 10:08
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

M>>Вот что по вашему лучше передавать в качестве даты в данном случае DateTime.MinValue или null?


AS>Зависит от организации и привычек. Я предпочитаю null.


Только вот в запросе, например, всё равно удобней пользоваться максимумом\минимум:
WHERE [Created] BETWEEN ISNULL(@CreatedFrom, '1753-01-01 00:00:00')
                    AND ISNULL(@CreatedTo, '9999-12-31 23:59:59');


Но передавать надо, конечно же, null.
Help will always be given at Hogwarts to those who ask for it.
Re[4]: DateTime.MinValue или null?
От: WolfHound  
Дата: 06.10.10 10:27
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Так в BCL именно так и сделано?

Вот сюда давно заглядывал?
http://msdn.microsoft.com/en-us/library/system.datetime.aspx

В моей схеме там было бы ровно 5 методов:
http://msdn.microsoft.com/en-us/library/system.datetime.add.aspx
http://msdn.microsoft.com/en-us/library/8ysw4sby.aspx
http://msdn.microsoft.com/en-us/library/ae6246z1.aspx
http://msdn.microsoft.com/en-us/library/5ata5aya.aspx
http://msdn.microsoft.com/en-us/library/system.datetime.gethashcode.aspx

Плюс соответствующие операторы для удобства.

Все остальное требует календаря и должно туда уехать.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: DateTime.MinValue или null?
От: _FRED_ Черногория
Дата: 06.10.10 10:51
Оценка:
Здравствуйте, WolfHound, Вы писали:

_FR>>Так в BCL именно так и сделано?

WH>Вот сюда давно заглядывал?
WH>http://msdn.microsoft.com/en-us/library/system.datetime.aspx
WH>В моей схеме там было бы ровно 5 методов:
WH>http://msdn.microsoft.com/en-us/library/system.datetime.add.aspx
WH>http://msdn.microsoft.com/en-us/library/8ysw4sby.aspx
WH>http://msdn.microsoft.com/en-us/library/ae6246z1.aspx
WH>http://msdn.microsoft.com/en-us/library/5ata5aya.aspx
WH>http://msdn.microsoft.com/en-us/library/system.datetime.gethashcode.aspx
WH>Плюс соответствующие операторы для удобства.

И что бы это дало?

WH>Все остальное требует календаря и должно туда уехать.


То есть Ticks/Millisecond/Minute/Hour/Date/TimeOfDay так же "вынесем за"? Это, конечно, [технически] можно сделать, обойдясь методами-расширениями, но, ИМХО, не принципиально.

Относительно DayOfWeek/DayOfYear/Day/Month/Year — поскольку выбранный "ноль" в точности соответствует одному из [наиболее часто используемых програмистами] календарей, они тут не выглядят лишними.

Просто [ИМХО, впролне оправданно] приняли решение при проектировании сделать работу с одним из календарей несколько более удобной, чем с остальными. Что ни как не отменяет использование других календарей.

Вот Kind действительно не очень полезен и вываливается из общей схемы, тут они схалтурили.
Help will always be given at Hogwarts to those who ask for it.
Re[6]: DateTime.MinValue или null?
От: WolfHound  
Дата: 06.10.10 11:54
Оценка: :)
Здравствуйте, _FRED_, Вы писали:

WH>>Плюс соответствующие операторы для удобства.

_FR>И что бы это дало?
Понимание того что там намешано куча разного мусора.

_FR>Просто [ИМХО, впролне оправданно] приняли решение при проектировании сделать работу с одним из календарей несколько более удобной, чем с остальными. Что ни как не отменяет использование других календарей.

Так можно оправдять любой косяк.
И вот из-за кучи таких казалось бы оправданых косяков получился .НЕТ о котором я без мата говорю с большим трудом.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: DateTime.MinValue или null?
От: _FRED_ Черногория
Дата: 06.10.10 12:11
Оценка: 1 (1)
Здравствуйте, WolfHound, Вы писали:

WH>>>Плюс соответствующие операторы для удобства.

_FR>>И что бы это дало?
WH>Понимание того что там намешано куча разного мусора.

Почему разного? Если отбросить Kind, то весь мусор — строго имеет отношение к одному календарю. Верно?

_FR>>Просто [ИМХО, впролне оправданно] приняли решение при проектировании сделать работу с одним из календарей несколько более удобной, чем с остальными. Что ни как не отменяет использование других календарей.

WH>Так можно оправдять любой косяк.

Что, впрочем, не означает, что оправдывается именно косяк. Это такая идеалогия у Майкрософта в проектировании API: не строгий минимализм SRP, а баланс вкупе с удобством использования. Они [справедливо] решили, что в большинстве случаев ничто кроме определённого календаря не нужно и внесли его в базу. Тем самым они не отменили другие календари. Они сделали простым использование наиболее частых сценариев.

WH>И вот из-за кучи таких казалось бы оправданых косяков получился .НЕТ о котором я без мата говорю с большим трудом.


ИМХО, "косяк" — это когда есть конкретный сценарий, приводящий к неожиданному поведению. В данном случае это одна из огрех API, которое нельзя сделать таким, что бы было одинаково хорошо всем разработчикам Всегда кто-то да и выматюгается
Help will always be given at Hogwarts to those who ask for it.
Re[8]: DateTime.MinValue или null?
От: WolfHound  
Дата: 06.10.10 12:35
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Почему разного? Если отбросить Kind, то весь мусор — строго имеет отношение к одному календарю. Верно?

Если мы убираем Kind то все остальное становится весьма бессмысленным ибо Day, Hour, DayOfWeek,... и многие други свойства зависят от часового пояса.
И как следствие они будут работать только для UTC что уже весьма смешно. Или тебе придется значение в DateTime корежить что криво и ведет к ошибкам.
С календарями такой проблемы нет. Просто при создании календаря указываем часовой пояс и все.

_FR>Что, впрочем, не означает, что оправдывается именно косяк. Это такая идеалогия у Майкрософта в проектировании API: не строгий минимализм SRP, а баланс вкупе с удобством использования. Они [справедливо] решили, что в большинстве случаев ничто кроме определённого календаря не нужно и внесли его в базу. Тем самым они не отменили другие календари. Они сделали простым использование наиболее частых сценариев.

И получаем говнокод.
Сначала нам нужен один часовой пояс, а потом несколько и приехали. Переписываем все приложение нахрен.
Нарушение SRP это очень серьезный косяк который очень часто приводит к проблемам.
А нарушение SRP в стандартной библиотеке платформы это просто преступление.

_FR>ИМХО, "косяк" — это когда есть конкретный сценарий, приводящий к неожиданному поведению.

Ветку почитай.

_FR>В данном случае это одна из огрех API, которое нельзя сделать таким, что бы было одинаково хорошо всем разработчикам Всегда кто-то да и выматюгается

В таком случае надо делать правильно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: DateTime.MinValue или null?
От: _FRED_ Черногория
Дата: 06.10.10 12:50
Оценка:
Здравствуйте, WolfHound, Вы писали:

_FR>>Почему разного? Если отбросить Kind, то весь мусор — строго имеет отношение к одному календарю. Верно?

WH>Если мы убираем Kind то все остальное становится весьма бессмысленным ибо Day, Hour, DayOfWeek,... и многие други свойства зависят от часового пояса.
WH>И как следствие они будут работать только для UTC что уже весьма смешно. Или тебе придется значение в DateTime корежить что криво и ведет к ошибкам.

Не только "только для UTC" а для какого-то неконкретного пояса.

WH>С календарями такой проблемы нет. Просто при создании календаря указываем часовой пояс и все.


_FR>>Что, впрочем, не означает, что оправдывается именно косяк. Это такая идеалогия у Майкрософта в проектировании API: не строгий минимализм SRP, а баланс вкупе с удобством использования. Они [справедливо] решили, что в большинстве случаев ничто кроме определённого календаря не нужно и внесли его в базу. Тем самым они не отменили другие календари. Они сделали простым использование наиболее частых сценариев.

WH>И получаем говнокод.

В некоторых случаях — несомненно.

_FR>>ИМХО, "косяк" — это когда есть конкретный сценарий, приводящий к неожиданному поведению.

WH>Ветку почитай.

"Косяком" является то, что вызов "dt.ToLocalTime();" вызвращает что-то не то, что было до этого? других косяков не заметил Или "косяк" — это появление в некоторых случаях "говнокода"? Тогда, косяк. Но если небыло бы этого косяка, во многих других случаях было бы больше… нет, не "говнокода" конечно же, но не очень нужного :о))

WH>Нарушение SRP это очень серьезный косяк который очень часто приводит к проблемам.

WH>А нарушение SRP в стандартной библиотеке платформы это просто преступление.

Пожалуй, да. Они, кстати, где-то даже каялись за DateTime

_FR>>В данном случае это одна из огрех API, которое нельзя сделать таким, что бы было одинаково хорошо всем разработчикам Всегда кто-то да и выматюгается

WH>В таком случае надо делать правильно.

А правильно, на мой взгляд, если тебе хочется работать с датой\временем по-взрослому, представлять дату в типе long и на DateTime забить вообще. То есть, в БД хранить как bigint, в софте [возможно] написать свой тип для представления. И проблем [больших] не будет. А мелкие не сложно решаемы.
Help will always be given at Hogwarts to those who ask for it.
Re[10]: DateTime.MinValue или null?
От: hardcase Пират http://nemerle.org
Дата: 06.10.10 14:39
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>"Косяком" является то, что вызов "dt.ToLocalTime();" вызвращает что-то не то, что было до этого? других косяков не заметил Или "косяк" — это появление в некоторых случаях "говнокода"? Тогда, косяк. Но если небыло бы этого косяка, во многих других случаях было бы больше… нет, не "говнокода" конечно же, но не очень нужного :о))


Косяк в том, что DateTime.Now дает это локальное время, а не UTC. И вот теперь надо попробовать объяснить всем разработчикам что использовать Now в реальных проектах не стоит.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[11]: DateTime.MinValue или null?
От: _FRED_ Черногория
Дата: 06.10.10 14:48
Оценка:
Здравствуйте, hardcase, Вы писали:

_FR>>"Косяком" является то, что вызов "dt.ToLocalTime();" вызвращает что-то не то, что было до этого? других косяков не заметил Или "косяк" — это появление в некоторых случаях "говнокода"? Тогда, косяк. Но если небыло бы этого косяка, во многих других случаях было бы больше… нет, не "говнокода" конечно же, но не очень нужного :о))


H>Косяк в том, что DateTime.Now дает это локальное время, а не UTC.


Это не является косяком само по себе — это опять же поведение, выбранное в свете наиболее часто используемых сценариев.

H>И вот теперь надо попробовать объяснить всем разработчикам что использовать Now в реальных проектах не стоит.


И вывод не правильный — приходится объяснять всем (и это сделано в документации, хоть и не явно), как надо использовать Now.
Help will always be given at Hogwarts to those who ask for it.
Re[10]: DateTime.MinValue или null?
От: WolfHound  
Дата: 06.10.10 14:54
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Не только "только для UTC" а для какого-то неконкретного пояса.

Вопрос в том какого? И что делать если их у нас несколько?
Кстати с летним и зимним временем тоже веселуха получается.
Причем как с ней бороться вообще не ясно.

_FR>"Косяком" является то, что вызов "dt.ToLocalTime();" вызвращает что-то не то, что было до этого? других косяков не заметил Или "косяк" — это появление в некоторых случаях "говнокода"? Тогда, косяк.

Само наличие ToLocalTime уже косяк.
Ибо локального времени не существует.
Это понятие виртуальное.
Нужно оно только в интерфейсе пользователя.
Во всех остальных местах оно делает все намного сложнее.

_FR>Но если небыло бы этого косяка, во многих других случаях было бы больше… нет, не "говнокода" конечно же, но не очень нужного :о))

Ну да...
someDate.ToString();
и
someDate.ToString(calendar);
это просто звездец какая разница.
Причем этот код будет исключительно на уровне интерфейса пользователя.

_FR>Пожалуй, да. Они, кстати, где-то даже каялись за DateTime

Им надо за весь .НЕТ каяться.
Причем можно начинать сразу с системы типов и MSIL. На эту темя я без мата вообще говорить не могу.

_FR>А правильно, на мой взгляд, если тебе хочется работать с датой\временем по-взрослому, представлять дату в типе long и на DateTime забить вообще. То есть, в БД хранить как bigint, в софте [возможно] написать свой тип для представления. И проблем [больших] не будет. А мелкие не сложно решаемы.

Ты таки согласен что все это косяк?
Но с чем же ты тогда споришь?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: DateTime.MinValue или null?
От: _FRED_ Черногория
Дата: 06.10.10 15:29
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

_FR>>Не только "только для UTC" а для какого-то неконкретного пояса.

WH>Вопрос в том какого? И что делать если их у нас несколько?
WH>Кстати с летним и зимним временем тоже веселуха получается.
WH>Причем как с ней бороться вообще не ясно.

А не важно. Если мы работаем с DateTime не обращая внимания на Kind, то нам важно только абсолютное значение. Сложности возникают лишь при получении откуда-то / передачи куда-то значений.

_FR>>"Косяком" является то, что вызов "dt.ToLocalTime();" вызвращает что-то не то, что было до этого? других косяков не заметил Или "косяк" — это появление в некоторых случаях "говнокода"? Тогда, косяк.

WH>Само наличие ToLocalTime уже косяк.

Очень может быть, такой же, как и наличие Kind.

WH>Во всех остальных местах оно делает все намного сложнее.


Для большого количества приложений — вполне достаточного.

_FR>>Но если небыло бы этого косяка, во многих других случаях было бы больше… нет, не "говнокода" конечно же, но не очень нужного :о))

WH>Ну да...
WH>someDate.ToString();
WH>и
WH>someDate.ToString(calendar);
WH>это просто звездец какая разница.
WH>Причем этот код будет исключительно на уровне интерфейса пользователя.

Методов таких было бы очень много:
var xxx = yyy.AddMonth(2, CultureInfo.InvariantCulture.Calendar);
// или, как сейчас
var xxx = CultureInfo.InvariantCulture.Calendar.AddMonth(yyy, 2);

вместо
var xxx = yyy.AddMonth(2);

И первое, что написали бы — это тип [DateTime, Calendar];

_FR>>Пожалуй, да. Они, кстати, где-то даже каялись за DateTime

WH>Им надо за весь .НЕТ каяться.
WH>Причем можно начинать сразу с системы типов и MSIL. На эту темя я без мата вообще говорить не могу.

А существует идеальная система типов?

_FR>>А правильно, на мой взгляд, если тебе хочется работать с датой\временем по-взрослому, представлять дату в типе long и на DateTime забить вообще. То есть, в БД хранить как bigint, в софте [возможно] написать свой тип для представления. И проблем [больших] не будет. А мелкие не сложно решаемы.

WH>Ты таки согласен что все это косяк?

Я согласен, что на это можео посмотреть как на косяк с точки зрения "старого, опытного каимкадзе".

WH>Но с чем же ты тогда споришь?


С тем, что это косяк О "косячности" архитектуры имеет смысл говорить с точки зрения задач, которые эта архитектура решает и для которых предназначена.

Майкрософт [к сожеление, но сожеление риторическое] ориентируется не только на продвинутых разработчиков, которые и так с помощью вотки и какой-то матери выкрутятся, а на комерческий успех предприятия. .NET работает [и, наверное, приносит прибыль] уже восемь, что ли, лет. Если бы они вылизывали своё АПИ и прочее ("системы типов и MSIL") и требовали хорошей подготовленности от пользователей, то не знаю, какая версия была бе сейчас текущей :о))

Резюмируя — конечно, с точки зрения хорошего АПИ многие [базовые, что преумножает] вещи сделаны недодуманно Но цель-то не сделать продуманное во всех (даже "во многих") смыслах АПИ, а сделать так, что сто тыщ индусов… ну и пару пряников гикам

Плохо, конечно, но с этим _можно жить_ (не "шикарно", но "припеваючи" — вполне). А недовольства высказывать имеет смысл только в ключе:

Душа моя Павел,
Держись моих правил:
Люби то-то, то-то,
Не делай того-то.
Кажись, это ясно.
Прощай, мой прекрасный.

(здесь)
Help will always be given at Hogwarts to those who ask for it.
Re: DateTime.MinValue или null?
От: chocho Россия  
Дата: 07.10.10 09:51
Оценка:
Здравствуйте,

Что-то я не понимаю проблемы с которой вы боретесь и за что ненавидите DateTime.

В распределённым приложении нужно работать с UTC временем, переводя его в локальное там где нужно.
Отсутствие даты\времени это null, не MinValue.
Kind у DateTime это нормально потому что указав его я знаю как себя ведёт объект при передаче по ремоутингу, время действительно может быть Local, UTC и Unspecified.
"Не морочьте мне голову. Полыхаев" ©
Re[2]: DateTime.MinValue или null?
От: hardcase Пират http://nemerle.org
Дата: 07.10.10 10:31
Оценка:
Здравствуйте, chocho, Вы писали:

C>Здравствуйте,


C>Что-то я не понимаю проблемы с которой вы боретесь и за что ненавидите DateTime.


Мы не боремся. Мы с ленцой высказываем своё фи.

C>В распределённым приложении нужно работать с UTC временем, переводя его в локальное там где нужно.


С текущей реализацией DateTime — да.

C>Kind у DateTime это нормально потому что указав его я знаю как себя ведёт объект при передаче по ремоутингу, время действительно может быть Local, UTC и Unspecified.


Но ведь можно было DateTime реализовать так, что не пришлось бы зниматься этой шизофренией.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: DateTime.MinValue или null?
От: chocho Россия  
Дата: 07.10.10 10:45
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Но ведь можно было DateTime реализовать так, что не пришлось бы зниматься этой шизофренией.


Я против неявности.
Вы предлагаете полагаться на название переменных, типа startTimUTC.ToUniversalTime() не изменит переменную?
Или вы за разные типы для локального и UTC-шного времени?
"Не морочьте мне голову. Полыхаев" ©
Re[4]: DateTime.MinValue или null?
От: WolfHound  
Дата: 07.10.10 11:01
Оценка:
Здравствуйте, chocho, Вы писали:

C>Я против неявности.

C>Вы предлагаете полагаться на название переменных, типа startTimUTC.ToUniversalTime() не изменит переменную?
C>Или вы за разные типы для локального и UTC-шного времени?
Я тут
Автор: WolfHound
Дата: 05.10.10
вроде все предельно ясно написал.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: DateTime.MinValue или null?
От: chocho Россия  
Дата: 07.10.10 13:02
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, chocho, Вы писали:


C>>Я против неявности.

C>>Вы предлагаете полагаться на название переменных, типа startTimUTC.ToUniversalTime() не изменит переменную?
C>>Или вы за разные типы для локального и UTC-шного времени?
WH>Я тут
Автор: WolfHound
Дата: 05.10.10
вроде все предельно ясно написал.


ну т.е. вы хотите чтобы DateTime был только UTC.
От этого фрэйврок не выиграл бы. Мне не раз нужно было рабоать с датами\временем, которые:
1. неопределены, просто некоторая дата и нам не важно из какой она таймзоны.
2. нужно отображать в таймзоне конкретного сервера.

Имхо, возможность работать с DateTime так как мне нужно в конкретном месте, это только плюс.
Например, возможность работать с локальным временем в подсистеме которая выполняется на текущей машине и завязаны на чужое API работающее с локальным временем.
"Не морочьте мне голову. Полыхаев" ©
Re[3]: DateTime.MinValue или null?
От: vdimas Россия  
Дата: 07.10.10 13:06
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

A>>А такое очень даже возможно в распределённых приложениях, например, клиентская программа находится в Москве в поясе UTC+3, а центральная БД, к которой идут запросы — в Лондоне с поясом UTC+0.

WH>Это все по тому что индус который делал эти классы не удосужился подумать головой.
WH>Единственно верный способ реализовать DateTime это зафиксировать некую точку во времени.
WH>Например 01.01.2000 00:00:00 UTC+0
WH>Или любую другую по вкусу.
WH>И отсчитывать от этой точки колличество наносекунд.

Ну тогда можно передавать не дату, а сразу тики. Кстати, эта возможность есть и сейчас, можно получить у DateTime long (64 бит) внутреннее значение, а затем воссоздать этот объект из этого значения. В базе данных можно хранить тогда просто эти тики. Ну и вполне принять за no-value какую-нить константу, например 0.
Re[4]: DateTime.MinValue или null?
От: WolfHound  
Дата: 07.10.10 13:31
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Ну тогда можно передавать не дату, а сразу тики. Кстати, эта возможность есть и сейчас, можно получить у DateTime long (64 бит) внутреннее значение, а затем воссоздать этот объект из этого значения. В базе данных можно хранить тогда просто эти тики. Ну и вполне принять за no-value какую-нить константу, например 0.

Что такое "статическая типизация" и зачем ее придумали знаешь?
Если да то должен понимать почему long не подходит.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: DateTime.MinValue или null?
От: WolfHound  
Дата: 07.10.10 13:31
Оценка:
Здравствуйте, chocho, Вы писали:

C>ну т.е. вы хотите чтобы DateTime был только UTC.

Ты точно не читаешь.
Я не хочу чтобы DateTime что-то знал о календарях вообще и часовых поясах в частности.
Ибо это нарушение SRP.
И хотя некоторые не сознательные личности спорят но в данном случае (в прочем как обычно) нарушение SRP привело к вполне конкретным проблемам.
И в данной теме некоторые из них ьыли озвучены.

C>От этого фрэйврок не выиграл бы. Мне не раз нужно было рабоать с датами\временем, которые:

C>1. неопределены, просто некоторая дата и нам не важно из какой она таймзоны.
Тут скорее ты себе внушил что не важно.
Ибо дата без таймзоны не имеет физического смысла.

C>2. нужно отображать в таймзоне конкретного сервера.

Получаем календарь с таймзоной сервера и спокойно отображаем. И нас не парит откуда мы получили дату и какой там часовой пояс.
Кстати заметь ты сам написал "отображать". Календари нужны только но уровне интерфейса пользователя.

C>Имхо, возможность работать с DateTime так как мне нужно в конкретном месте, это только плюс.

C>Например, возможность работать с локальным временем в подсистеме которая выполняется на текущей машине и завязаны на чужое API работающее с локальным временем.
API завязаное на локальное время это само по себе кривь жуткая. Никогда не нарывался на проблемы с переводом часов на летнее/зимнее время?
А если это мобильный девайс и он пересекает часовые пояса?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: DateTime.MinValue или null?
От: chocho Россия  
Дата: 07.10.10 14:18
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, chocho, Вы писали:


C>>ну т.е. вы хотите чтобы DateTime был только UTC.

WH>Ты точно не читаешь.
WH>Я не хочу чтобы DateTime что-то знал о календарях вообще и часовых поясах в частности.

Да, я прочитал по диагонали, сорри. Это ещё хуже, я без календаря не смогу даже залогировать дату.

WH>Ибо это нарушение SRP.


Возможно и нарушение, но интерфейс класса непротиворечив, имхо, и по-моему удобен. Возможно было бы лучше если бы он был обёрткой для набора классов.
Соглашусь, что для каких-то мифических задач может быть неудобен, ничто не мешает его использовать в 99% случаев, а в остальных написать свою реализацию.

WH>И хотя некоторые не сознательные личности спорят но в данном случае (в прочем как обычно) нарушение SRP привело к вполне конкретным проблемам.

WH>И в данной теме некоторые из них ьыли озвучены.

C>>От этого фрэйврок не выиграл бы. Мне не раз нужно было рабоать с датами\временем, которые:

C>>1. неопределены, просто некоторая дата и нам не важно из какой она таймзоны.
WH>Тут скорее ты себе внушил что не важно.
WH>Ибо дата без таймзоны не имеет физического смысла.

Когда фрэймворк за меня решает, что для меня лучше, имхо, это не правильно.
В данном случае значение даты интерпретирует юзер, а я только предоставляю фильтрацию по ней.
В будущем, возможно, что-то изменится, главное, что у меня есть выбор как поступить.

C>>2. нужно отображать в таймзоне конкретного сервера.

WH>Получаем календарь с таймзоной сервера и спокойно отображаем. И нас не парит откуда мы получили дату и какой там часовой пояс.
WH>Кстати заметь ты сам написал "отображать". Календари нужны только но уровне интерфейса пользователя.

Нужно как минимум логировать и как здорово было бы дебажиться с помощью mdbg видя вместо даты 64битное число.

C>>Имхо, возможность работать с DateTime так как мне нужно в конкретном месте, это только плюс.

C>>Например, возможность работать с локальным временем в подсистеме которая выполняется на текущей машине и завязаны на чужое API работающее с локальным временем.
WH>API завязаное на локальное время это само по себе кривь жуткая. Никогда не нарывался на проблемы с переводом часов на летнее/зимнее время?
WH>А если это мобильный девайс и он пересекает часовые пояса?

Естественно речь о каком-нибудь небольшом компоненте который из таймзоны в таймзону не перелетает.
Просто есть возможность не постоянно конвертить время, а перевести его один раз и работать.

В общем, это моё мнение, пусть тут полежит. )
"Не морочьте мне голову. Полыхаев" ©
Re[7]: DateTime.MinValue или null?
От: k.o. Россия  
Дата: 07.10.10 14:29
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, chocho, Вы писали:


C>>От этого фрэйврок не выиграл бы. Мне не раз нужно было рабоать с датами\временем, которые:

C>>1. неопределены, просто некоторая дата и нам не важно из какой она таймзоны.
WH>Тут скорее ты себе внушил что не важно.
WH>Ибо дата без таймзоны не имеет физического смысла.

Иногда, всё-таки, имеет, также как имеет смысл использовать локальное время не только в UI. Например, для хранения/обработки данных о скорости движения на дорогах. Природа их такова, что утром и вечером, из-за пробок, скорость будет одинаково низкая, независимо от того где находится дорога: в Москве или Нью-Йорке. Я, разумеется, немного упрощаю, но в целом, всё так и есть.

P.S. с тем, что нарушать SRP нехорошо я не спорю.
Re[8]: DateTime.MinValue или null?
От: WolfHound  
Дата: 07.10.10 15:55
Оценка:
Здравствуйте, chocho, Вы писали:

C>Да, я прочитал по диагонали, сорри. Это ещё хуже, я без календаря не смогу даже залогировать дату.

Как человек работавший в свое время с очень большими логами весьма плотно могу со всей ответственностью заявить что текстовые логи это очень злое зло.

C>Когда фрэймворк за меня решает, что для меня лучше, имхо, это не правильно.

А он всегда решает. И в данном случае нарешал такое что лучше бы вообще ничего не решал.

C>В данном случае значение даты интерпретирует юзер, а я только предоставляю фильтрацию по ней.

C>В будущем, возможно, что-то изменится, главное, что у меня есть выбор как поступить.
И будешь ты разгребать где какая дата...

C>Естественно речь о каком-нибудь небольшом компоненте который из таймзоны в таймзону не перелетает.

C>Просто есть возможность не постоянно конвертить время, а перевести его один раз и работать.
Это он сейчас не перелетает. А потом начнет.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: DateTime.MinValue или null?
От: vdimas Россия  
Дата: 07.10.10 16:47
Оценка:
Здравствуйте, WolfHound, Вы писали:

V>>Ну тогда можно передавать не дату, а сразу тики. Кстати, эта возможность есть и сейчас, можно получить у DateTime long (64 бит) внутреннее значение, а затем воссоздать этот объект из этого значения. В базе данных можно хранить тогда просто эти тики. Ну и вполне принять за no-value какую-нить константу, например 0.

WH>Что такое "статическая типизация" и зачем ее придумали знаешь?

Догадываюсь.

WH>Если да то должен понимать почему long не подходит.


Не в ту область тебя занесло. Мы сейчас обсыждали "протокол" передачи DateTime из одной части системы, в другую. А представление данных в "протоколе" может не совпадать с оперируемыми на "логическом" уровне.
Re[6]: DateTime.MinValue или null?
От: WolfHound  
Дата: 07.10.10 18:51
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Не в ту область тебя занесло. Мы сейчас обсыждали "протокол" передачи DateTime из одной части системы, в другую. А представление данных в "протоколе" может не совпадать с оперируемыми на "логическом" уровне.

Не знаю что ты там обсуждаешь. Но я обсуждаю дизан класса DateTime и то как его сделать правильно.
А во что он там сериализуется меня не волнует.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: DateTime.MinValue или null?
От: Sinix  
Дата: 08.10.10 00:35
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ибо локального времени не существует.

Ну, намерения были хорошие:

There was a lot of desire to keep the type system simple, and while a time zone aware DateTime was better at representing absolute points in time such as a file time-stamp, it got awkward when doing certain things:

— Interoperating with database, COM or legacy systems where the time zone could not be reliably inferred.

Representing genuinely abstract dates and time, e.g. the opening times for stores of a company spanning time zones.

— Representing whole dates, e.g. the type for a calendar control to return. (Obviously a “Date” type is an even better way of representing this, and many people have asked for separate Date and Time types, but in V1.0 there was a desire to keep the number of base types small to limit complexity of the platform. This feature request is definitely still on the table, although not planned for .NET 3.5).


А в результате вышло сами знаете что. Свежачок-с.
Re[12]: DateTime.MinValue или null?
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.10.10 03:10
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>И первое, что написали бы — это тип [DateTime, Calendar];

Именно, что первое. А подумав — пишут:

Prior to JDK 1.1, the class Date had two additional functions. It allowed the interpretation of dates as year, month, day, hour, minute, and second values. It also allowed the formatting and parsing of date strings. Unfortunately, the API for these functions was not amenable to internationalization. As of JDK 1.1, the Calendar class should be used to convert between dates and time fields and the DateFormat class should be used to format and parse date strings. The corresponding methods in Date are deprecated.


http://download.oracle.com/javase/1.4.2/docs/api/java/util/Date.html
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: DateTime.MinValue или null?
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.10.10 03:11
Оценка: +1
Здравствуйте, vdimas, Вы писали:


V>Ну тогда можно передавать не дату, а сразу тики. Кстати, эта возможность есть и сейчас, можно получить у DateTime long (64 бит) внутреннее значение, а затем воссоздать этот объект из этого значения. В базе данных можно хранить тогда просто эти тики. Ну и вполне принять за no-value какую-нить константу, например 0.

Вопрос в семантике этих тиков. Косяк DateTime — в том, что эти тики могут отсчитываться от разных моментов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[11]: DateTime.MinValue или null?
От: Воронков Василий Россия  
Дата: 08.10.10 13:36
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Причем можно начинать сразу с системы типов и MSIL. На эту темя я без мата вообще говорить не могу.


О, я можно расширить про систему типов и MSIL?
Re[5]: DateTime.MinValue или null?
От: Воронков Василий Россия  
Дата: 08.10.10 13:40
Оценка: +3
Здравствуйте, WolfHound, Вы писали:

C>>Я против неявности.

C>>Вы предлагаете полагаться на название переменных, типа startTimUTC.ToUniversalTime() не изменит переменную?
C>>Или вы за разные типы для локального и UTC-шного времени?
WH>Я тут
Автор: WolfHound
Дата: 05.10.10
вроде все предельно ясно написал.


По сути то, что ты хочешь от DateTime — это нехитрая такая обверточка над Long. Кто мешает реализовать свой тип подобным образом и сделать календарь для всех остальных операций — "заготовочного" кода, уверен, можно найти немало. И ругаться ни на кого не надо. Заодно можно показать людям "как правильно".

Это если действительно есть по работе большие проблемы с DateTime, а не так, к слову пришлось.
Re[3]: DateTime.MinValue или null?
От: andy1618 Россия  
Дата: 08.10.10 18:15
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>А кто-то автоматически без ведома программиста преобразованиями занимается?


Да, имелись ввиду умышленные преобразования. Естественно, при грамотном подходе ничего страшного не случится (например, можно сделать отдельные проверки на "волшебные значения", чтобы их не затронуть).

_FR>
A>>dt = dt.ToLocalTime();                      // {01.01.0001 03:00:00} 
_FR>

_FR>есть просто изменение значения переменной aka
_FR>
A>>dt = dt.AddHours(hours);
_FR>


Не всегда. Например, в Московском часовом поясе для DateTime.MaxValue при переводе времени в локальное ничего не произойдёт (кроме, разве что, магии с Kind).
Re[7]: DateTime.MinValue или null?
От: andy1618 Россия  
Дата: 08.10.10 18:26
Оценка:
Здравствуйте, WolfHound, Вы писали:

C>>Например, возможность работать с локальным временем в подсистеме которая выполняется на текущей машине и завязаны на чужое API работающее с локальным временем.

WH>API завязаное на локальное время это само по себе кривь жуткая. Никогда не нарывался на проблемы с переводом часов на летнее/зимнее время?

Во, вот это точно!!! Очень забавно смотреть на приложения с таймлайнами, у которых в эти два "критических" дня в году возникает либо "час Сурка" (два часа с одинаковым временем), либо час с "чёрной дырой", где времени вообще нет
Если при этом аппликуха не падает — это уже можно считать достижением!
Re[8]: DateTime.MinValue или null?
От: Aen Sidhe Россия Просто блог
Дата: 08.10.10 19:03
Оценка:
Здравствуйте, andy1618, Вы писали:

A>Здравствуйте, WolfHound, Вы писали:


C>>>Например, возможность работать с локальным временем в подсистеме которая выполняется на текущей машине и завязаны на чужое API работающее с локальным временем.

WH>>API завязаное на локальное время это само по себе кривь жуткая. Никогда не нарывался на проблемы с переводом часов на летнее/зимнее время?

A>Во, вот это точно!!! Очень забавно смотреть на приложения с таймлайнами, у которых в эти два "критических" дня в году возникает либо "час Сурка" (два часа с одинаковым временем), либо час с "чёрной дырой", где времени вообще нет

A>Если при этом аппликуха не падает — это уже можно считать достижением!

Никогда не думали, что время может использоваться только как маркер в отладочных логах?
С уважением, Анатолий Попов.
ICQ: 995-908
Re[7]: DateTime.MinValue или null?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 12.10.10 11:38
Оценка: +2
WH>Кстати заметь ты сам написал "отображать". Календари нужны только но уровне интерфейса пользователя.

сильно упрощаете, календать нужен всегда, а не только в интерфейсе пользователя.


есть значительное кол-во задач по обработке данных выполняемых на сервере, которые требуют отнести дату к тому или иному часу, дню, дню недели, месяцу, году и т.д.
и здесь выясняется, что день по utc, это не тоже самое, что день по локальному времени.
и пользователи знать не хотят что такое utc, а хотят видеть свои любимые дни по локальному времени.
Re[8]: DateTime.MinValue или null?
От: WolfHound  
Дата: 12.10.10 11:45
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>есть значительное кол-во задач по обработке данных выполняемых на сервере, которые требуют отнести дату к тому или иному часу, дню, дню недели, месяцу, году и т.д.

Например?

DG>и здесь выясняется, что день по utc, это не тоже самое, что день по локальному времени.

DG>и пользователи знать не хотят что такое utc, а хотят видеть свои любимые дни по локальному времени.
Спасибо кэп.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: DateTime.MinValue или null?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 12.10.10 12:45
Оценка:
DG>>есть значительное кол-во задач по обработке данных выполняемых на сервере, которые требуют отнести дату к тому или иному часу, дню, дню недели, месяцу, году и т.д.
WH>Например?

раз уж зашла речь о логах, то:
выдать записи за сегодня

зы
с одной стороны — эту задачу можно решать в лоб на стороне пользователя, заменяя сегодня при передаче на сервер на неудобовариемую пару:
[DateTime.Now.Date.ToUtc(), DateTime.Now.Date.AddDays(1).ToUtc()]

но если задача большая, то требуется предподготовка данных, и приходится определять что такое сегодня, вчера, текущая неделя и т.д. на стороне сервера до запроса пользователя.
Re[9]: DateTime.MinValue или null?
От: k.o. Россия  
Дата: 12.10.10 13:15
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, DarkGray, Вы писали:


DG>>есть значительное кол-во задач по обработке данных выполняемых на сервере, которые требуют отнести дату к тому или иному часу, дню, дню недели, месяцу, году и т.д.

WH>Например?

Пример отсюда
Автор: k.o.
Дата: 07.10.10
не устраивает?
Re[10]: DateTime.MinValue или null?
От: Aikin Беларусь kavaleu.ru
Дата: 12.10.10 13:20
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>раз уж зашла речь о логах, то:

DG>выдать записи за сегодня
Не мимо. Для логов лишние/недостающие 1% записей не играют роли.

Лучше взять какую-нить систему оплаты на основании данных входа/выхода на предприятие: опоздал -- штраф, задержался -- двойной тариф


Вот только не нужно говорить, что "сервер и клиенты в одной таймзоне будут".У нас сервер в Люксембурге, а заводы по всей Европе (но я не в курсе как там САП справляется ).

СУВ, Aikin
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
Re[10]: DateTime.MinValue или null?
От: WolfHound  
Дата: 12.10.10 13:37
Оценка:
Здравствуйте, k.o., Вы писали:

KO>Пример отсюда
Автор: k.o.
Дата: 07.10.10
не устраивает?

Извини за прямоту но там: бред феерический.
Движку который считает загруженность дорого календарь не нужен. Вообще. Ему пофигу в какое время образовалась пробка.
Это важно только пользователю. А в интерфейсе пользователя у нас уже есть календарь.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: DateTime.MinValue или null?
От: WolfHound  
Дата: 12.10.10 13:37
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>раз уж зашла речь о логах, то:

DG>выдать записи за сегодня
Текстовые логи зло. Я в свое время с ними наплюхался.
Нагепать от туда что-то инересное порой весьма не просто.

DG>с одной стороны — эту задачу можно решать в лоб на стороне пользователя, заменяя сегодня при передаче на сервер на неудобовариемую пару:

DG>[DateTime.Now.Date.ToUtc(), DateTime.Now.Date.AddDays(1).ToUtc()]
Именно так и надо делать.
Только не таким ужасным кодом конечно же.

DG>но если задача большая, то требуется предподготовка данных, и приходится определять что такое сегодня, вчера, текущая неделя и т.д. на стороне сервера до запроса пользователя.

А конкретно?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: DateTime.MinValue или null?
От: k.o. Россия  
Дата: 12.10.10 14:50
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, k.o., Вы писали:


KO>>Пример отсюда
Автор: k.o.
Дата: 07.10.10
не устраивает?

WH>Извини за прямоту но там: бред феерический.

Не вижу ничего страшного в прямоте.

WH>Движку который считает загруженность дорого календарь не нужен. Вообще. Ему пофигу в какое время образовалась пробка.

WH>Это важно только пользователю. А в интерфейсе пользователя у нас уже есть календарь.

Честно говоря, не понял что ты называешь "Движком который считает загруженность дорог", но, например, движку маршрутизации, который ищет кратчайший по времени маршрут из точки A в точку B нужно знать текущее время и время проезда по заданной дороге в текущий момент времени. Очевидно, также, что для текущего момента времени лучше использовать UTC, чтобы корректно обрабатывать пересечения часовых поясов и переходы на летнее/зимнее время. А вот подсистеме, которая будет работать с данными и сообщать время проезда по данной дороге в данное время, локальное время может оказаться полезным, хотя бы, для работы с таким источником данных как TeleAtlas Speed Profiles (tm) или чем-нибудь аналогичным.
Re[12]: DateTime.MinValue или null?
От: WolfHound  
Дата: 12.10.10 15:10
Оценка:
Здравствуйте, k.o., Вы писали:

KO>Честно говоря, не понял что ты называешь "Движком который считает загруженность дорог", но, например, движку маршрутизации, который ищет кратчайший по времени маршрут из точки A в точку B нужно знать текущее время и время проезда по заданной дороге в текущий момент времени.

И нафига тут локальное время?

KO>Очевидно, также, что для текущего момента времени лучше использовать UTC, чтобы корректно обрабатывать пересечения часовых поясов и переходы на летнее/зимнее время.

Во-во.

KO>А вот подсистеме, которая будет работать с данными и сообщать время проезда по данной дороге в данное время, локальное время может оказаться полезным, хотя бы, для работы с таким источником данных как TeleAtlas Speed Profiles (tm) или чем-нибудь аналогичным.

Зачем?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: DateTime.MinValue или null?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.10.10 15:28
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Это все по тому что индус который делал эти классы не удосужился подумать головой.


Именно поэтому в итоге добавили DateTimeOffset. Получилось, правда, опять странновато.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
AVK Blog
Re[13]: DateTime.MinValue или null?
От: k.o. Россия  
Дата: 12.10.10 15:36
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, k.o., Вы писали:


KO>>Честно говоря, не понял что ты называешь "Движком который считает загруженность дорог", но, например, движку маршрутизации, который ищет кратчайший по времени маршрут из точки A в точку B нужно знать текущее время и время проезда по заданной дороге в текущий момент времени.

WH>И нафига тут локальное время?

А я и не говорил, что оно тут нужно. Это контекст для, лучшего понимания примера, который приводится ниже.

KO>>Очевидно, также, что для текущего момента времени лучше использовать UTC, чтобы корректно обрабатывать пересечения часовых поясов и переходы на летнее/зимнее время.

WH>Во-во.

KO>>А вот подсистеме, которая будет работать с данными и сообщать время проезда по данной дороге в данное время, локальное время может оказаться полезным, хотя бы, для работы с таким источником данных как TeleAtlas Speed Profiles (tm) или чем-нибудь аналогичным.

WH>Зачем?

Оно там используется для более компактного представления данных. Как я уже говорил, скорость движения по дороге, хорошо коррелирует с локальным, для этой дороги, временем и эта зависимость может быть одинаковой для дорог из совершенно разных часовых поясов. Если хочешь подробностей почитай описание формата здесь, идея там очень простая. Использование локального времени выглядит там совершенно естественно, более того, если бы использовалось UTC, эти данные протухали-бы при любом изменении часовых поясов, да и и переход на летнее время непонятно как учитывать.
Re: DateTime.MinValue или null?
От: alexzz  
Дата: 12.10.10 15:39
Оценка:
Здравствуйте, merge, Вы писали:
M>Есть фильтр, где юзер вбивает даты начала и окончания для поиска.
M>Если юзер не вбил любую или обе из дат, то интервал открыт для поиска.

M>Вот что по вашему лучше передавать в качестве даты в данном случае DateTime.MinValue или null?


1. Пользователь хочет искать что-то от начала времён до дня Д.
2. Интерфейс не позволяет ему выразить это желание явно, а заставляет не указывать начало интервала.
3. Пользователь не указывает начало интервала, и тем самым продолжает подразумевать, что надо искать от начала времён.

Начало времён ― это DateTime.MinValue.

---
since = DateTime.MinValue;
until = DateTime.MaxValue;

since = null;
until = null;

Что понятнее?
Re[11]: DateTime.MinValue или null?
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 12.10.10 16:11
Оценка:
DG>>с одной стороны — эту задачу можно решать в лоб на стороне пользователя, заменяя сегодня при передаче на сервер на неудобовариемую пару:
DG>>[DateTime.Now.Date.ToUtc(), DateTime.Now.Date.AddDays(1).ToUtc()]
WH>Именно так и надо делать.
WH>Только не таким ужасным кодом конечно же.

а каким?

DG>>но если задача большая, то требуется предподготовка данных, и приходится определять что такое сегодня, вчера, текущая неделя и т.д. на стороне сервера до запроса пользователя.

WH>А конкретно?

всё аля OLAP: посчитать и хранить сколько происшествий было сегодня, вчера, позавчера, на этой недели, в прошлом месяце и т.д.
и вот все эти сегодня, этот месяц и т.д. пользователь ожидает что это будет localtime, а не какой-то там utc.
Re[5]: DateTime.MinValue или null?
От: vdimas Россия  
Дата: 14.10.10 01:54
Оценка:
Здравствуйте, Sinclair, Вы писали:

V>>Ну тогда можно передавать не дату, а сразу тики. Кстати, эта возможность есть и сейчас, можно получить у DateTime long (64 бит) внутреннее значение, а затем воссоздать этот объект из этого значения. В базе данных можно хранить тогда просто эти тики. Ну и вполне принять за no-value какую-нить константу, например 0.

S>Вопрос в семантике этих тиков. Косяк DateTime — в том, что эти тики могут отсчитываться от разных моментов.

Ну так информация об этом никуда не пропадает.
В бинарном представлении тиков в старших полях хранится признак — локальное это время, или UTC. В различных сценариях удобно оперировать различным представлением. "Удобно" в том плане, что не нужно каждый раз лезть в календарь и локаль часового пояса, чтобы преобразовывать даты на каждый чих. Ибо доступ к календарю и локальному часовому поясу очень тяжеловесен, т.к. выполняются блокировки на уровне даже не процесса, а вообще всей ОС.

А если хочется "чистоты", как тут проповедует Wolfhound, то все давно есть. Вернее, есть все запчасти, чтобы за 10 мин написать свой класс с произвольной логикой. Прими некую UTC дату за точку 0 в своем классе, и отсчитывай от него тики (TimeSpan).
class UtcTime {
    long _ticks;

    static long Zero = new DateTime(2000, 1, 1, 0, 0, 0).Ticks; // we count it as UTC

    public implicit operator UtcTime(DateTime dt) {
        switch(dt.Kind) {
        case DateTimeKind.Utc: return UtcTime(dt.Ticks);
        case DateTimeKind.Local: return UtcTime(dt.ToUniversalTime(dt.Ticks));
        }
        throw InvaldArgumentException("Unspecified DateTime value");
    }    

    public implicit operator DateTime(UtcDateTime dt) {
         return new DateTime(Zero + _ticks, DateTimeKind.Utc);
    }    

    ... 
    // TODO: определить мемберы, аналогично мемберам DateTime
}
Re[6]: DateTime.MinValue или null?
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.10.10 02:23
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Ну так информация об этом никуда не пропадает.

Гм. Её как бы вовсе и нету.

V>В бинарном представлении тиков в старших полях хранится признак — локальное это время, или UTC.

Ага. Проблема только в том, что понятие "локальное" эквивалентно понятию "не знаю какое".

V> В различных сценариях удобно оперировать различным представлением. "Удобно" в том плане, что не нужно каждый раз лезть в календарь и локаль часового пояса, чтобы преобразовывать даты на каждый чих. Ибо доступ к календарю и локальному часовому поясу очень тяжеловесен, т.к. выполняются блокировки на уровне даже не процесса, а вообще всей ОС.

Вот это мне кажется, мягко говоря, преувеличением. Календарь — это математическая абстракция. Ничего блокировать ему не надо. А часовой пояс на чтение не должен как-то очень сильно напрягать систему.

V>А если хочется "чистоты", как тут проповедует Wolfhound, то все давно есть. Вернее, есть все запчасти, чтобы за 10 мин написать свой класс с произвольной логикой. Прими некую UTC дату за точку 0 в своем классе, и отсчитывай от него тики (TimeSpan).

Это всё понятно. Я и класс строки могу свой написать. Толку-то? Мы говорим о платформе. 100% окружающего кода будут отдавать мне дату не в TimeSpan, а в обычных DateTime. В которых мне опять придётся гадать, кто из них кто.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: DateTime.MinValue или null?
От: vdimas Россия  
Дата: 14.10.10 09:17
Оценка:
Здравствуйте, Sinclair, Вы писали:


V>>В бинарном представлении тиков в старших полях хранится признак — локальное это время, или UTC.

S>Ага. Проблема только в том, что понятие "локальное" эквивалентно понятию "не знаю какое".

Это просто флаг, семантика использования которого зависит от добросовестности программиста.
Локально — это означает локальный ввод-вывод, и вычисления, привязанные к локальным моментам времени, не более того. В этом плане Wolfhound прав (с поправками от оппонентов).
Никакому пользователю не нужен UTC, разумеется, вот и используйте DateTime только для локального ввода-вывода.

V>> В различных сценариях удобно оперировать различным представлением. "Удобно" в том плане, что не нужно каждый раз лезть в календарь и локаль часового пояса, чтобы преобразовывать даты на каждый чих. Ибо доступ к календарю и локальному часовому поясу очень тяжеловесен, т.к. выполняются блокировки на уровне даже не процесса, а вообще всей ОС.

S>Вот это мне кажется, мягко говоря, преувеличением. Календарь — это математическая абстракция. Ничего блокировать ему не надо. А часовой пояс на чтение не должен как-то очень сильно напрягать систему.

Как это не должен? Из любой другой программы тебе поменяют часовой пояс, и он у тебя должен тут же "подхватиться" в твоей программе. Никаких кеширований для доступа только по чтению календаря и часового пояса быть не может.

Если бы вся ОС была управляемой с GC, то для доступа по чтению действительно блокировки были бы не нужны, при условии атомарного чтения ссылки на объект и принятом соглашении, что при изменении . А т.к. ось нативная, то равнозначно блокируются операции чтения и записи ресурса.

V>>А если хочется "чистоты", как тут проповедует Wolfhound, то все давно есть. Вернее, есть все запчасти, чтобы за 10 мин написать свой класс с произвольной логикой. Прими некую UTC дату за точку 0 в своем классе, и отсчитывай от него тики (TimeSpan).

S>Это всё понятно. Я и класс строки могу свой написать. Толку-то? Мы говорим о платформе. 100% окружающего кода будут отдавать мне дату не в TimeSpan, а в обычных DateTime. В которых мне опять придётся гадать, кто из них кто.

Ну так я ключевое и показал — это implicit операторы приведения типа.
Re[2]: DateTime.MinValue или null?
От: ZevS Россия  
Дата: 14.10.10 12:47
Оценка: +1
Здравствуйте, alexzz, Вы писали:

A>since = DateTime.MinValue;

A>until = DateTime.MaxValue;

A>since = null;

A>until = null;

A>Что понятнее?


А что правильнее? Поиск часто проводится в базе данных. В некоторых базах данных минимально возоможное время отличается от DateTime.MinValue в большую сторону, то есть передача DateTime.MinValue как параметра запроса приведет к ошибке.
Re[3]: DateTime.MinValue или null?
От: alexzz  
Дата: 14.10.10 16:44
Оценка:
Здравствуйте, ZevS, Вы писали:

ZS>Здравствуйте, alexzz, Вы писали:


A>>since = DateTime.MinValue;

A>>until = DateTime.MaxValue;

A>>since = null;

A>>until = null;

A>>Что понятнее?


ZS>А что правильнее? Поиск часто проводится в базе данных. В некоторых базах данных минимально возоможное время отличается от DateTime.MinValue в большую сторону, то есть передача DateTime.MinValue как параметра запроса приведет к ошибке.


Ещё поиск часто проводится не в базе данных. Автор не поставил вообще никаких условий.

Между прочим, в отличие от всего предыдущего словоблудия, которое тут развернулось, твой пост первый нормальный, потому что с чётким обоснованием.
Re[4]: DateTime.MinValue или null?
От: ZevS Россия  
Дата: 15.10.10 07:31
Оценка:
Здравствуйте, alexzz, Вы писали:

A>Ещё поиск часто проводится не в базе данных. Автор не поставил вообще никаких условий.

Тем более глупо использовать занчение по-умолчанию, ведь тогда в списке, в которм мы собрались искать могут оказаться и даты меньше нашей минимальной по-умолчанию, и мы банально выберем не все значения. Многое, конечно, зависит от конкретной задачи.
Re[13]: DateTime.MinValue или null?
От: Ocelot  
Дата: 24.11.10 01:53
Оценка: 69 (3)
Здравствуйте, Sinclair, Вы писали:

_FR>>И первое, что написали бы — это тип [DateTime, Calendar];

S>Именно, что первое. А подумав — пишут:

S>

S>Prior to JDK 1.1, the class Date had two additional functions. It allowed the interpretation of dates as year, month, day, hour, minute, and second values. [/b]


S>http://download.oracle.com/javase/1.4.2/docs/api/java/util/Date.html


Ох, если бы все было так просто
Навскидку, вот: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6281408
Замечу, версия JDK не 1.0, не 1.1 и даже не 1.2 (а это все были очень даже полноценные релизы!).
Согласитесь, далеко от концепции "чисто дата + календарь", преведенной в данной ветке выше.
Т.е. оно по API и документации вроде бы как соответствует, а вот по факту — нет.
Что характерно, в 1.5 баг пофиксили. Внутрь не заглядывал, но с большой долей вероятности могу предположить, что концепция поменялась "в правильную" сторону — Date сделали более математически-абстрактной, не так сильно зависящей от настроек окружения. По крайней мере, надеюсь

А мораль сей басни — увы, но, похоже, декомпозиция такого, казалось бы, очевидного и простого понятия, как "дата" и "время" не так уж проста. Очень разный смысл иногда в них вкладывается. И главная проблема, что смысл чаще всего похожий, но все-таки не одинаковый.
И это даже в пределах одной платформы. А если разные — то все еще гораздо веселее в плане "одинаковости" концепций. Вот чисто навскидку (могу, конечно, ошибаться, а проверять немного лениво, но, может, кто-нибудь чуть больше в теме) — библиотеки Java вроде как поддерживает leap seconds, а .NET — нет. Наверняка при портировании или интеграции некоторых приложений кто-то уже поимел удовольствие долго и нудно искать потерянную секунду, а потом быстренько мигрировать на самописный велосипед
Re[3]: DateTime.MinValue или null?
От: Ocelot  
Дата: 24.11.10 02:24
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Единственно верный способ реализовать DateTime это зафиксировать некую точку во времени.

WH>Например 01.01.2000 00:00:00 UTC+0
WH>Или любую другую по вкусу.
WH>И отсчитывать от этой точки колличество наносекунд.
WH>Если больше 0 то дата после нашего начала времен. Если меньше то до.
WH>А преобразование в строку и обратно должен делать объект календарь который уже будет учитывать всякие там часовые пояса, весокосные года, прыгающие секунды и что там еще есть...

Ну тогда уж хотя бы так: "Зафиксировать некоторый момент времени и пространстве, выраженный в фиксированном календарном представлении" Потому что UTC+0 в вашей записи это отсылка именно к определенному часовому поясу (а это все-таки по смыслу пространственная характеристика http://en.wikipedia.org/wiki/Time_zone), а сама дата задана вполне определенным образом (рискну предположить, что по Григорианскому календарю ).
Вам не кажется, что это само по себе может быть проблемой — пытаться сделать календарь надстройкой над более абстрактным понятием "дата", уже используя некий календарь для ее определения?
Ну и самое главное, осталось договориться, что же наша дата будет отсчитывать, какое время. Астрономическое? Атомное? Или еще какое-нибудь?
Оно, конечно, в подавляющем большинстве случаев GMT==UTC. Но не всегда, отнюдь не всегда. Отсюда и детали, а в них, как известно, дьявол.
Re[2]: DateTime.MinValue или null?
От: Ocelot  
Дата: 24.11.10 02:57
Оценка:
Здравствуйте, alexzz, Вы писали:

M>>Есть фильтр, где юзер вбивает даты начала и окончания для поиска.

M>>Если юзер не вбил любую или обе из дат, то интервал открыт для поиска.

M>>Вот что по вашему лучше передавать в качестве даты в данном случае DateTime.MinValue или null?


A>1. Пользователь хочет искать что-то от начала времён до дня Д.


Ну извините, это совершенно разные вещи.
В начальном условии ("интервал открыт для поиска") подразумевается наличие только верхней границы (date < end_date). Если использовать DateTime.MinValue, то поиск будет идти по верхней и нижней границе (date < end_date && date > DateTime.MinValue), что, как вам уже показали, далеко не одно и то же.
Но так хоть нижняя граница задана явно, а вот ваше "от начала времён" подразумевает поиск по нижней границе, определяемой из контекста. То есть вообще не ведомо какой. Потому что "начало времен" это не какая-нибудь конкретная дата, в нее любой смысл можно вложить. У вас одно "начало времен", у кого-то совсем другое.

Но это уже так, мелочи Главное, что поиск по одному условию вы предлагаете заменить на поиск по двум. Ну хорошо, допустим, "начало времен" это начало нашей эры, 1 января 1 года, 00:00. Угадайте, что посчитает ваш запрос, если, скажем, задать день Д = 00:00 1 января 1 года до нашей эры?
Re[3]: DateTime.MinValue или null?
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.12.10 13:31
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Только вот в запросе, например, всё равно удобней пользоваться максимумом\минимум:

_FR>
_FR>WHERE [Created] BETWEEN ISNULL(@CreatedFrom, '1753-01-01 00:00:00')
_FR>                    AND ISNULL(@CreatedTo, '9999-12-31 23:59:59');
_FR>


_FR> Но передавать надо, конечно же, null.

Не уверен, что это хорошая идея.
1. Не всякий оптимизатор догадается выполнить IsNull единожды. Так что есть риск внезапно отказаться от использования индекса.
2. Даже если оптимизатор догадается выполнить constant propagation до начала выполнения, крайне маловероятно, что он сможет верно оценить селективность. То есть, если бы мы совсем выкинули этот оператор сравнения, то оптимизатор мог рассмотреть какие-нибудь более удачные индексы. Я имею в виду — в случае чуть более сложного запроса, конечно же.
В плохом случае у нас есть некий view, построенный при помощи star-join из кучи таблиц. И возможность пользователя фильтровать по произвольному количеству из этих полей. Если в реальности как правило в каждом поиске используется всего лишь пара полей, то значительно эффективнее строить запрос только с их участием. Запрос с where ((x = @x) or (@x is null)) AND ... AND ... AND ... с очень большой вероятностью свалится в table scan при любом наборе входных аргументов.

Поэтому настоящие джыдаи, конечно же, строят запрос динамически.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: DateTime.MinValue или null?
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.12.10 13:47
Оценка:
Здравствуйте, vdimas, Вы писали:
V>Это просто флаг, семантика использования которого зависит от добросовестности программиста.
Боюсь, что его вообще невозможно использовать корректно — независимо от добросовестности.
Вот я зарегистрировал момент входа пользователя в программу — DateTime1.
Вот пользователь перевёл часовой пояс.
Вот я пытаюсь вычислить длительность сессии через Now() — DateTime1. Упс! Оказывается, что смысл Local для этих дат совершенно различен. Рекомендую посмотреть на реакцию хистори в Скайпе при переключениях часового пояса — на предмет понимания того, как делать не надо.

V>Локально — это означает локальный ввод-вывод, и вычисления, привязанные к локальным моментам времени, не более того. В этом плане Wolfhound прав (с поправками от оппонентов).

V>Никакому пользователю не нужен UTC, разумеется, вот и используйте DateTime только для локального ввода-вывода.
Современному пользователю нужна возможность оперировать глобальными датами. Пример со скайпом я только что привёл. И это ещё одно из наиболее осведомлённых о часовых поясах приложениями.
S>>Вот это мне кажется, мягко говоря, преувеличением. Календарь — это математическая абстракция. Ничего блокировать ему не надо. А часовой пояс на чтение не должен как-то очень сильно напрягать систему.
V>Как это не должен? Из любой другой программы тебе поменяют часовой пояс, и он у тебя должен тут же "подхватиться" в твоей программе. Никаких кеширований для доступа только по чтению календаря и часового пояса быть не может.
Не вижу никакой проблемы. Во-первых, часовой пояс в такой архитектуре начинает играть роль только, грубо говоря, в момент преобразования даты в строку. Сами даты внутри представляются в UTC, что позволяет игнорировать все прыжки часового пояса. Это раз.
Далее, мы имеем, к примеру, похожую ситуацию с числами. Вот я меняю себе десятичный разделитель, и все 143 запущенных программы мгновенно на это реагируют. Хотя никто из них не занимается ерундой типа хранения чисел с признаком "IsLocal". Надо полагать, блокировки интернационализации не так дорого обходятся.

V>Если бы вся ОС была управляемой с GC, то для доступа по чтению действительно блокировки были бы не нужны, при условии атомарного чтения ссылки на объект и принятом соглашении, что при изменении . А т.к. ось нативная, то равнозначно блокируются операции чтения и записи ресурса.

Этот пассаж мне вообще непонятен. Ось есть ось. Методы доступа к TimeZoneInfo существуют; реализовать эффективный ReaderWriterLock там ничего не стоит. В дотнете есть вполне себе эффективная инфраструктура работы с интернационализацией. То, что при каждом вызове int.ToString(), неявно подхватывается информация о текущей локали, никого не останавливает.

V>Ну так я ключевое и показал — это implicit операторы приведения типа.

Не понимаю. Как будет выглядеть op_implicit для DateTime -> SensibleDateTime? В обратную-то сторону всё и так понятно. А как мне угадать, в каком часовом поясе была получена "локальная" дата?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: DateTime.MinValue или null?
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.12.10 13:50
Оценка:
Здравствуйте, chocho, Вы писали:

C>Да, я прочитал по диагонали, сорри. Это ещё хуже, я без календаря не смогу даже залогировать дату.

Насколько я понимаю, тот факт, что без формата ты не можешь залогировать флоат, тебя не смущает. Ведь какой-то магией флоаты всё же логгируются, так?

Никто не мешает приклеить к DateTime екстеншн-методы, которые сами возьмут дефолтный календарь.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: DateTime.MinValue или null?
От: _FRED_ Черногория
Дата: 02.12.10 15:37
Оценка:
Здравствуйте, Sinclair, Вы писали:

_FR>>Только вот в запросе, например, всё равно удобней пользоваться максимумом\минимум:

_FR>>
_FR>>WHERE [Created] BETWEEN ISNULL(@CreatedFrom, '1753-01-01 00:00:00')
_FR>>                    AND ISNULL(@CreatedTo, '9999-12-31 23:59:59');
_FR>>


_FR>> Но передавать надо, конечно же, null.

S>Не уверен, что это хорошая идея.

Да, с динамикой, конечно же, джедайнее. А если это код хранимки? На SQL-е составлять другой SQL то ещё развлечение Хотя, и хранимки, пожалуй, уже удел старых, опытных, мастеров, а юные падаваны имеют средства обходиться без них

А вот лучше ли "BETWEEN ISNULL" чем, например,
WHERE (@CreatedFrom IS NULL OR [Created] >= @CreatedFrom)
  AND (@CreatedTo IS NULL OR [Created] < @CreatedTo)


Вообще и, конкретно, для MSSQL?
Help will always be given at Hogwarts to those who ask for it.
Re[5]: DateTime.MinValue или null?
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.12.10 13:49
Оценка:
Здравствуйте, _FRED_, Вы писали:


_FR>Да, с динамикой, конечно же, джедайнее. А если это код хранимки? На SQL-е составлять другой SQL то ещё развлечение

Ну, мы же это делали
_FR>Хотя, и хранимки, пожалуй, уже удел старых, опытных, мастеров, а юные падаваны имеют средства обходиться без них

_FR>А вот лучше ли "BETWEEN ISNULL" чем, например,

_FR>
_FR>WHERE (@CreatedFrom IS NULL OR [Created] >= @CreatedFrom)
_FR>  AND (@CreatedTo IS NULL OR [Created] < @CreatedTo)
_FR>


_FR>Вообще и, конкретно, для MSSQL?

Вообще сильно зависит от оптимизатора. Для MSSQL — надо запускать и смотреть план запроса. Я слишком давно играл с ним, чтобы судить о современном состоянии его оптимизатора.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: DateTime.MinValue или null?
От: _FRED_ Черногория
Дата: 03.12.10 15:29
Оценка:
Здравствуйте, Sinclair, Вы писали:

_FR>>Да, с динамикой, конечно же, джедайнее. А если это код хранимки? На SQL-е составлять другой SQL то ещё развлечение

S>Ну, мы же это делали

А что за техники можно применять, что бы облегчить? Или только конкатенация строк?
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.