|
|
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
всем привет. суть проблемки: имеется некий алгоритм, поставляющий на выход 3 числа: день, месяц и год. Нужно выяснить, валидна ли составленная из них дата, напр.: день = 1, месяц = 5, год = 2005 ---> дата верна день = 31, месяц = 2, 2008 ---> дата неверна DateSerial не подходит, поскольку ситуацию во 2-м примере он элементарно сконвертит в 3-е марта. Преобразовывать в строку и проверять IsDate'ом? тут у меня большие сомнения от недостаточной информированности. Как преобразовать в строку, чтобы работало под любой локалью? Есть какой-нибудь "универсальный" формат для даты в VB? (наподобие yyyymmdd для sql server'а, если кто в курсе). Поясню. Если я тупо преобразую в строку по типу cstr(день) + "." + cstr(месяц) + "." + cstr(год), то оно будет корректно отрабатывать, скажем, для русской и немецкой языковых настроек, но некорректно для американской (потому что там порядок дня и месяца другой) и для итальянской (потому что там разделители не точки, а слэши). Вот. Заранее благодарен за советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 18:52 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
В США тоже слэши, вообще-то. Чтобы узнать местный формат даты, можно поступить так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 19:49 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
VladConnВ США тоже слэши, вообще-то. Чтобы узнать местный формат даты, можно поступить так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. да, с США я слегка не подумав написал, но это уже детали. спасибо за пример. Я могу, конечно, на крайняк разделители даты из текущей локали вытаскивать. И даже проверять, не американская ли стоит локаль, чтобы поменять местами день и месяц. Но надеялся, что есть простой и надежный способ, что называется, в 1 строчку. А то мало ли, вдруг есть страна, где год в начале пишут. Или где-нить еще по-американски дату форматируют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 19:56 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
Василий Пупкинпоставляющий на выход 3 числа: день, месяц и год И чё? Если есть уже три числа, созданные алгоритмом, дата из них уже будет валидна. Имхо, автор, в добрых традициях, не понимает разницы между датой и строковым представлением даты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 20:02 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
Я вам показал простой и надежный способ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 20:15 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
ДыкИ чё? Если есть уже три числа, созданные алгоритмом, дата из них уже будет валидна. Не факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 20:19 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
ДыкИмхо, автор, в добрых традициях, не понимает разницы между датой и строковым представлением даты. да понимаю я прекрасно. авторЕсли есть уже три числа, созданные алгоритмом, дата из них уже будет валидна. нет. Я, может, выразился неправильно. Алгоритм у меня - это, грубо говоря, клик по гриду размером 12 на 31. Берем и смотрим, в какой ячейке клик. Строка будет днем, столбец - месяцем. Год задан. Естественно, при этом могут быть кликнуты ячейки, соответствующиее несуществующим датам. Вот этот момент мне, грубо говоря, и надо отловить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 20:20 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
VladConnЯ вам показал простой и надежный способ а вообще, да, действительно, че это я... просто заменить в форматной строке нахрен dd, mm и yy(yy) реплэйсом на нужные числа, и не мучиться.... Мерси. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 20:23 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
Между прочим, в России раньше "по-американски" дату форматировали. Почитайте письма Гоголя: ноября, 13 дня ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 20:25 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
Василий Пупкин VladConnЯ вам показал простой и надежный способ а вообще, да, действительно, че это я... просто заменить в форматной строке нахрен dd, mm и yy(yy) реплэйсом на нужные числа, и не мучиться.... Мерси. My pleasure ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 20:26 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
Василий Пупкин ДыкИмхо, автор, в добрых традициях, не понимает разницы между датой и строковым представлением даты. да понимаю я прекрасно. авторЕсли есть уже три числа, созданные алгоритмом, дата из них уже будет валидна. нет. Я, может, выразился неправильно... Вы выразились абсолютно правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2008, 20:29 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
Василий Пупкина вообще, да, действительно, че это я... просто заменить в форматной строке нахрен dd, mm и yy(yy) реплэйсом на нужные числа, и не мучиться.... Мерси. Нафига? Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2008, 12:22 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
А не поясните. Зачем нужен какой то грид и потом геморой с ним, когда есть нормальные контролы, стандартные Calendar, DTPicker к примеру, из которых дата всегда валидна? Или Вы свой контрол пишите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2008, 12:49 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
Дык Нафига? Код: plaintext 1. 2. А нафига? Цитирую: Дык "Если есть уже три числа, созданные алгоритмом, дата из них уже будет валидна." И кроме того, этот ваш If будет генерировать ошибки, когда год, например, попадает в позицию дня. У вас там неразумно dd as date. :0)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2008, 16:47 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
VladConnА нафига? Цитирую: Дык "Если есть уже три числа, созданные алгоритмом, дата из них уже будет валидна." А прочитайте-ка ответ автора на это предположение. Из которого ясно, почему оно в случае автора неверно. VladConnИ кроме того, этот ваш If будет генерировать ошибки, когда год, например, попадает в позицию дня. У вас там неразумно dd as date.:0)) Внимательно читайте топик, там есть авторАлгоритм у меня - это, грубо говоря, клик по гриду размером 12 на 31. Берем и смотрим, в какой ячейке клик. Строка будет днем, столбец - месяцем. Год задан. Естественно, при этом могут быть кликнуты ячейки, соответствующиее несуществующим датам. Вот этот момент мне, грубо говоря, и надо отловить. Потом прочитайте вдобавок авторDateSerial не подходит, поскольку ситуацию во 2-м примере он элементарно сконвертит в 3-е марта. Из которого совсем всё ясно. Что DateSerial-то подходит, просто надо проверить, что он не перевёл дни/месяцы вперёд (читайте справку по DateSerial об этом поведении). Это и проверяется в ифе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2008, 17:02 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
Насчет генерирования ошибки - беру слова обратно. Эта функция (dateserial) имеет "подлый" норов - вместо ошибки генерирует смещяемую определенным образом дату. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2008, 17:05 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
Вы сначали утверждали, что дата будет всегда "валидна", а потом сами же проверяете ее на валидность, вот и все. Но идея ваша все равно мне нравится. Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2008, 17:09 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
VladConnВы сначали утверждали, что дата будет всегда "валидна", а потом сами же проверяете ее на валидность, вот и все. Но идея ваша все равно мне нравится. Просто в первый раз под валидностью я понимал отсутствие даты типа 84/78/0451, и что автору нужно убедиться в этом Потом автор объяснил, почему так не бывает, и что имеет в виду под валидностью он. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2008, 17:12 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
ОК. "Валидность" даты - сложный вопрос. Есть техническая "валидность", есть бизнес-"валидность", есть "валидность" даты на клиенте vs на сервере, и т.д. Я, например, когда пишу приложение клиент - сервер, то оперирую обычно датой с сервера, чтобы клиент на баловАл. Если дать ему такую возможность (хотя иногда это и нужно), то появляется лазейка для шулерства. Просто об этом надо всегда помнить, иметь ввиду. Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2008, 17:27 |
|
||
|
валидация даты под любой локалью
|
|||
|---|---|---|---|
|
#18+
> Автор: Василий Пупкин > всем привет. > > суть проблемки: имеется некий алгоритм, поставляющий на выход 3 > числа: день, месяц и год. Нужно выяснить, валидна ли составленная из них > дата, напр.: Хм, тут ту-же тему обсуждают. Как тебе их варианты? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2008, 12:27 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=35341413&tid=2162225]: |
0ms |
get settings: |
6ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
102ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 471ms |

| 0 / 0 |
