Название: Неоднозначность при использовании QDateTime Отправлено: Odyssey от Июнь 22, 2011, 09:19 В программе мне приходится переводить QDateTime в строку и обратно (команды toString и fromString). Беда в том, что формат представления должен быть таков, что год записывается двумя цифрами.
Собственно, можно ведь 01-01-11 прочитать и как 1 января 2011 года и как 1 января 1911 года (оба варианта допустимы, а из строки понять нельзя). Так вот оно у меня и происходит. В некоторых случаях цифры года распознаются правильно, а в некоторых - нет. Что делать для снятия этой неоднозначности? Название: Re: Неоднозначность при использовании QDateTime Отправлено: Пантер от Июнь 22, 2011, 09:20 Вручную корректировать?
Название: Re: Неоднозначность при использовании QDateTime Отправлено: LisandreL от Июнь 22, 2011, 10:51 Если есть возможность - изменить формат передачи даты. ( Если нужно выводить так - это не значит что надо именно так передавать)
Если невозможно отказаться от такого формата передачи времени Если вы передаёте в таком формате и не знаете промежутка допустимых лет, то восстановить дату вы не сможете. Название: Re: Неоднозначность при использовании QDateTime Отправлено: GreatSnake от Июнь 22, 2011, 10:54 Что делать для снятия этой неоднозначности? Может хранить дату в time_t?Название: Re: Неоднозначность при использовании QDateTime Отправлено: Denjs от Июнь 22, 2011, 11:58 Что делать для снятия этой неоднозначности? Решение проблемы лежит вне области программирования, а в области требований к программе. в данном случае - к входным и выходным данным. В данных же документах должно зафиксировать что формат с 2-я цифрами года - "не однозначен"(из данных - XX-XX-XX нельзя однозначно понять формат) (впрочем и в случае года с 4-я цифрами тоже не всегда - в пиндостании, кажется, так исторически сложилось, что распространен формат "месяц-день-год" - "XX-XX-XXXX") .Потому в сопроводительных документах и помощи/подсказках надо четко указывать что и в каком формате вы требуете/ожидаете на входе. Что делать? 1) поменять формат представления на тот, который не вызывает неоднозначности. скажем на "yyyy.MMM.dd". 2) использовать "QDateTime::fromString ( const QString & string, const QString & format )" с явным указанием формата - format="yy-MM-dd", или "dd-MM-yy" - но что-то одно и _везде_. Не пытайтесь предугадать тараканов в голове пользователя. Не пытайтесь угадать формат входных данных. Просто требуйте вводить дату в заданном формате и все. Не надо брать на себя ответственность за "неправильный разбор данных" в условиях когда формат не известен и тем более не однозначен. Вынесите эту ответственность из области проектирования программы в область рантайма и переложите эту ответственность на оператора, снабдив его соответствующими подсказками. Исправить поведение оператора можно, а предугадать данные с которыми он работает - нельзя. имха)) Название: Re: Неоднозначность при использовании QDateTime Отправлено: LisandreL от Июнь 22, 2011, 13:11 Может хранить дату в time_t? Если старые версии Qt не нужны, то лучше MSecsSinceEpoch. У time_t диапазон дат довольно узок и тот же 1911 в нём вообще представить нельзя.Название: Re: Неоднозначность при использовании QDateTime Отправлено: Odyssey от Июнь 22, 2011, 16:28 Спасибо большое.
Решил тем, что попросту изыскал способ перейти на формат "yyyy". Пантер предложил версию явной проверки в программе значения QDateTime и изменения ее на 100 лет, если значение меньше определенной даты. Тоже работало. |