Member 13740197 Ответов: 1

Как сравнить два объекта qtime в QT


Привет,

У меня есть проблема с сравнением двух дат.У меня есть одна дата и время, то есть конечная дата и конечное время.Поэтому мне нужно сравнить эту дату с текущей датой.За это я и взялся

enddate (объект QDate)
endtime (объект QTime)
curdate (объект QDate)
curtime (объект QTime)
Здесь проблема в том, что конечное время я взял в формате "hh:mm:ss AP".Но когда я назначаю текущее время, оно ничего не берет.Так как же сравнивать эти времена.Есть ли какой-нибудь способ сравнить дату и время одновременно с помощью объекта QDateTime?Не могли бы вы, пожалуйста, предоставить решение.

Что я уже пробовал:

Я взял enddate & endtime из базы данных
QDate enddate ->в формате "ДД/ММ/гггг"
QTime endtime ->в формате "hh:mm:ss AP"

Я взял текущую дату и время следующим образом

QDate curdate = QDate::currentDate();
QString ctime = QDateTime::currentDateTime().toString("hh:mm:ss AP");
QTime curtime;
curtime.fromString(ctime,"hh:mm:ss AP");

Сравнение выглядит следующим образом:
if(curdate <= enddate)
{
if (curtime < endtime)
{
}
}
Когда я печатаю curtime,он ничего не печатает, не могли бы вы, пожалуйста, предоставить решение.

KarstenK

Вы должны понимать преимущества объектно-ориентированного проектирования классов: сложные объекты могут выполнять такие операции, как сравнение. Одна из причин, почему используются объекты ...

1 Ответов

Рейтинг:
7

Jochen Arndt

Никогда не сравнивайте даты и время, используя строковые представления.

Просто сравните объекты, которые обеспечивают общие операции сравнения <, >, <=, >=, ==, и !=. Увидеть QTime Class | Qt Core 5.9[^] и то же самое Класс QDate | Qt Core 5.10[^] документация.

Даты и время также должны храниться как таковые в базах данных, а не в виде строк. Используйте соответствующие методы для их извлечения в двоичном формате (параметризованные запросы).

Если у вас все еще есть строковые данные, вы должны знать используемый формат. Если это так, то вы можете преобразовать строки в соответствующие QDate и QTime объекты, использующие fromString() методы.

[РЕДАКТИРОВАТЬ]
Чтобы установить QTime в нынешнее время использования QTime::currentTime()[^].

Вы также можете подумать об использовании DATETIME поле в вашей базе данных и поле QDateTime тип. Это значительно упрощает работу со связанными датами и временем. Особенно если вы не используете UTC (что в любом случае настоятельно рекомендуется при хранении меток времени).
[/РЕДАКТИРОВАТЬ]


CPallini

5.

Member 13740197

Я знаю идею на sqlite,так что какой тип данных мы должны взять, чтобы сохранить объект QDatetime в БД.И как вернуть объект.Значит, я могу взять непосредственно объект как qry.value(0)

Jochen Arndt

SQLite отличается от других баз данных по датам. Видишь ли https://www.sqlite.org/datatype3.html

Я предлагаю хранить как Unix время. Это может быть запрошено и установлено как любое другое целое число.

Используйте QDateTime::fromSecsSinceEpoch() для инициализации из значения базы данных и QDateTime::toSecsSinceEpoch() для получения значения, которое будет передано в базу данных.

Для раздельной обработки даты и времени в графическом интерфейсе используйте соответствующие функции QDateTime date() и time() для получения объектов QDate и QTime, а также setDate() и setTime() для их передачи.

Member 13740197

Спасибо