metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-10-13 03:04 pm

Тупой и еще тупее

Скажите мне пожалуйста, существует ли общепринятый метод передачи дат или даты-времени в параметрах URL для сервиса, например?
Сколько не пишу подобное - практически всегда все сводится к "прибиваем гвоздями ISO8601, парсим строку руками и под каждую задачу заново решаем, что делать с невалидными строками - то ли валится с 4хх, то ли валится с 5хх, то ли игнорировать ошибки, использовать или нет TryParse (если он вообще есть, обычно нету - "у нас всегда все работает, а невалидных дат не бывает") и как возвращать сообщения об ошибках клиенту так, чтобы он мог хоть что-то вменяемое сделать.

[identity profile] sergiej.livejournal.com 2013-10-13 12:19 pm (UTC)(link)
если юзеру нет дела до даты и времени то юниксовый таймстемп просто и удобно. Если есть дело то хоть и не станарт, но удобоно: YYYYMMDDHHMMSS (ну если часовой пояс некритичен) :)
Edited 2013-10-13 12:20 (UTC)

[identity profile] belezbar.livejournal.com 2013-10-13 12:31 pm (UTC)(link)
А если ещё и пояс добавить: 13 = +3, 03 = -3 ?

[identity profile] sergiej.livejournal.com 2013-10-13 12:51 pm (UTC)(link)
можно, но как автор правильно заметил - всё это обходные маневры, а стандарта безопасного нет

[identity profile] dr-cha0s.livejournal.com 2013-10-13 04:35 pm (UTC)(link)
Зачем? Всё в UTC.

[identity profile] gds.livejournal.com 2013-10-13 12:53 pm (UTC)(link)
во, такое я видел, вполне удобно.

А ошибки парсинга -- ну, как и в любых других случаях обрабатывать, чем дата/время тут особенны?

[identity profile] w00dy.livejournal.com 2013-10-13 02:28 pm (UTC)(link)
А если вам нужны даты до 1970 года? В общем в жопу unix timestamp. Лучше тогда как в DateTime - хранить тики в int64, один тик - 100ns. До 10000 года вроде хватает.

[identity profile] sergiej.livejournal.com 2013-10-13 03:19 pm (UTC)(link)
Можно тики. Но как тогда даты до большого взрыва хранить? И непонятно как время из параллельного пространства хранить.

[identity profile] sbj-ss.livejournal.com 2013-10-13 03:41 pm (UTC)(link)
Зря вы так категорично.
Точек отсчёта придумано стопицот, но на моей памяти ни одна не учитывает интересы историков. Когда несколько лет назад у нас на конторе зашла речь об обучающей системе именно по истории, то вообще предлагалась безумная идея собственного формата с распихиванием по битам (чтобы влезть в 4 байта на x86), который в SQL Server хранился просто в int - чтобы обеспечить поиск и сортировку. Это не от хорошей жизни, а от отсутствия альтернатив.
Впрочем, "даты до 1970" касаются не только историков. Даты рождения, например.

[identity profile] sergiej.livejournal.com 2013-10-13 04:35 pm (UTC)(link)
я просто шучу. Всё зависит от поставленной задачи.

[identity profile] lionet.livejournal.com 2013-10-13 10:29 pm (UTC)(link)
Что не так с юниксовым таймстампом для дней рождения? Отрицательные числа — не миф.

[identity profile] sbj-ss.livejournal.com 2013-10-14 08:39 am (UTC)(link)
Да, по стандарту - timestamp со знаком. Спасибо, что поправили.

[identity profile] lionet.livejournal.com 2013-10-13 10:31 pm (UTC)(link)
YYMMDDHHMMSS — это и есть один вариантов ISO8601. Только если добавить в конец символ 'Z' — будет ещё и однозначно в смысле таймзоны: UTC.

[identity profile] sergiej.livejournal.com 2013-10-14 04:25 am (UTC)(link)
ну вот и прелестно. Главное, что оно парсится в лёт стандартными парсерами дат в джаве например.