qdatetime.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:10k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtCore module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QDATETIME_H
  38. #define QDATETIME_H
  39. #include <QtCore/qstring.h>
  40. #include <QtCore/qnamespace.h>
  41. QT_BEGIN_HEADER
  42. QT_BEGIN_NAMESPACE
  43. QT_MODULE(Core)
  44. class Q_CORE_EXPORT QDate
  45. {
  46. public:
  47.     QDate() { jd = 0; }
  48.     QDate(int y, int m, int d);
  49.     bool isNull() const { return jd == 0; }
  50.     bool isValid() const;
  51.     int year() const;
  52.     int month() const;
  53.     int day() const;
  54.     int dayOfWeek() const;
  55.     int dayOfYear() const;
  56.     int daysInMonth() const;
  57.     int daysInYear() const;
  58.     int weekNumber(int *yearNum = 0) const;
  59. #ifndef QT_NO_TEXTDATE
  60. #ifdef QT3_SUPPORT
  61.     static QT3_SUPPORT QString monthName(int month) { return shortMonthName(month); }
  62.     static QT3_SUPPORT QString dayName(int weekday) { return shortDayName(weekday); }
  63. #endif
  64.     static QString shortMonthName(int month);
  65.     static QString shortDayName(int weekday);
  66.     static QString longMonthName(int month);
  67.     static QString longDayName(int weekday);
  68. #endif // QT_NO_TEXTDATE
  69. #ifndef QT_NO_DATESTRING
  70.     QString toString(Qt::DateFormat f = Qt::TextDate) const;
  71.     QString toString(const QString &format) const;
  72. #endif
  73.     bool setYMD(int y, int m, int d);
  74.     bool setDate(int year, int month, int date);
  75.     QDate addDays(int days) const;
  76.     QDate addMonths(int months) const;
  77.     QDate addYears(int years) const;
  78.     int daysTo(const QDate &) const;
  79.     bool operator==(const QDate &other) const { return jd == other.jd; }
  80.     bool operator!=(const QDate &other) const { return jd != other.jd; }
  81.     bool operator<(const QDate &other) const { return jd < other.jd; }
  82.     bool operator<=(const QDate &other) const { return jd <= other.jd; }
  83.     bool operator>(const QDate &other) const { return jd > other.jd; }
  84.     bool operator>=(const QDate &other) const { return jd >= other.jd; }
  85.     static QDate currentDate();
  86. #ifndef QT_NO_DATESTRING
  87.     static QDate fromString(const QString &s, Qt::DateFormat f = Qt::TextDate);
  88.     static QDate fromString(const QString &s, const QString &format);
  89. #endif
  90.     static bool isValid(int y, int m, int d);
  91.     static bool isLeapYear(int year);
  92. #ifdef QT3_SUPPORT
  93.     inline static QT3_SUPPORT bool leapYear(int year) { return isLeapYear(year); }
  94. #endif
  95.     // ### Qt 5: remove these two functions
  96.     static uint gregorianToJulian(int y, int m, int d);
  97.     static void julianToGregorian(uint jd, int &y, int &m, int &d);
  98. #ifdef QT3_SUPPORT
  99.     static QT3_SUPPORT QDate currentDate(Qt::TimeSpec spec);
  100. #endif
  101.     static inline QDate fromJulianDay(int jd) { QDate d; d.jd = jd; return d; }
  102.     inline int toJulianDay() const { return jd; }
  103. private:
  104.     uint jd;
  105.     friend class QDateTime;
  106.     friend class QDateTimePrivate;
  107. #ifndef QT_NO_DATASTREAM
  108.     friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QDate &);
  109.     friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QDate &);
  110. #endif
  111. };
  112. Q_DECLARE_TYPEINFO(QDate, Q_MOVABLE_TYPE);
  113. class Q_CORE_EXPORT QTime
  114. {
  115. public:
  116.     QTime(): mds(NullTime)
  117. #if defined(Q_OS_WINCE)
  118.         , startTick(NullTime)
  119. #endif
  120.     {}
  121.     QTime(int h, int m, int s = 0, int ms = 0);
  122.     bool isNull() const { return mds == NullTime; }
  123.     bool isValid() const;
  124.     int hour() const;
  125.     int minute() const;
  126.     int second() const;
  127.     int msec() const;
  128. #ifndef QT_NO_DATESTRING
  129.     QString toString(Qt::DateFormat f = Qt::TextDate) const;
  130.     QString toString(const QString &format) const;
  131. #endif
  132.     bool setHMS(int h, int m, int s, int ms = 0);
  133.     QTime addSecs(int secs) const;
  134.     int secsTo(const QTime &) const;
  135.     QTime addMSecs(int ms) const;
  136.     int msecsTo(const QTime &) const;
  137.     bool operator==(const QTime &other) const { return mds == other.mds; }
  138.     bool operator!=(const QTime &other) const { return mds != other.mds; }
  139.     bool operator<(const QTime &other) const { return mds < other.mds; }
  140.     bool operator<=(const QTime &other) const { return mds <= other.mds; }
  141.     bool operator>(const QTime &other) const { return mds > other.mds; }
  142.     bool operator>=(const QTime &other) const { return mds >= other.mds; }
  143.     static QTime currentTime();
  144. #ifndef QT_NO_DATESTRING
  145.     static QTime fromString(const QString &s, Qt::DateFormat f = Qt::TextDate);
  146.     static QTime fromString(const QString &s, const QString &format);
  147. #endif
  148.     static bool isValid(int h, int m, int s, int ms = 0);
  149. #ifdef QT3_SUPPORT
  150.     static QT3_SUPPORT QTime currentTime(Qt::TimeSpec spec);
  151. #endif
  152.     void start();
  153.     int restart();
  154.     int elapsed() const;
  155. private:
  156.     enum TimeFlag { NullTime = -1 };
  157.     inline int ds() const { return mds == -1 ? 0 : mds; }
  158.     int mds;
  159. #if defined(Q_OS_WINCE)
  160.     int startTick;
  161. #endif
  162.     friend class QDateTime;
  163.     friend class QDateTimePrivate;
  164. #ifndef QT_NO_DATASTREAM
  165.     friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QTime &);
  166.     friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QTime &);
  167. #endif
  168. };
  169. Q_DECLARE_TYPEINFO(QTime, Q_MOVABLE_TYPE);
  170. class QDateTimePrivate;
  171. class Q_CORE_EXPORT QDateTime
  172. {
  173. public:
  174.     QDateTime();
  175.     explicit QDateTime(const QDate &);
  176.     QDateTime(const QDate &, const QTime &, Qt::TimeSpec spec = Qt::LocalTime);
  177.     QDateTime(const QDateTime &other);
  178.     ~QDateTime();
  179.     QDateTime &operator=(const QDateTime &other);
  180.     bool isNull() const;
  181.     bool isValid() const;
  182.     QDate date() const;
  183.     QTime time() const;
  184.     Qt::TimeSpec timeSpec() const;
  185.     uint toTime_t() const;
  186.     void setDate(const QDate &date);
  187.     void setTime(const QTime &time);
  188.     void setTimeSpec(Qt::TimeSpec spec);
  189.     void setTime_t(uint secsSince1Jan1970UTC);
  190. #ifndef QT_NO_DATESTRING
  191.     QString toString(Qt::DateFormat f = Qt::TextDate) const;
  192.     QString toString(const QString &format) const;
  193. #endif
  194.     QDateTime addDays(int days) const;
  195.     QDateTime addMonths(int months) const;
  196.     QDateTime addYears(int years) const;
  197.     QDateTime addSecs(int secs) const;
  198.     QDateTime addMSecs(qint64 msecs) const;
  199.     QDateTime toTimeSpec(Qt::TimeSpec spec) const;
  200.     inline QDateTime toLocalTime() const { return toTimeSpec(Qt::LocalTime); }
  201.     inline QDateTime toUTC() const { return toTimeSpec(Qt::UTC); }
  202.     int daysTo(const QDateTime &) const;
  203.     int secsTo(const QDateTime &) const;
  204.     bool operator==(const QDateTime &other) const;
  205.     inline bool operator!=(const QDateTime &other) const { return !(*this == other); }
  206.     bool operator<(const QDateTime &other) const;
  207.     inline bool operator<=(const QDateTime &other) const { return !(other < *this); }
  208.     inline bool operator>(const QDateTime &other) const { return other < *this; }
  209.     inline bool operator>=(const QDateTime &other) const { return !(*this < other); }
  210.     void setUtcOffset(int seconds);
  211.     int utcOffset() const;
  212.     static QDateTime currentDateTime();
  213. #ifndef QT_NO_DATESTRING
  214.     static QDateTime fromString(const QString &s, Qt::DateFormat f = Qt::TextDate);
  215.     static QDateTime fromString(const QString &s, const QString &format);
  216. #endif
  217.     static QDateTime fromTime_t(uint secsSince1Jan1970UTC);
  218. #ifdef QT3_SUPPORT
  219.     inline QT3_SUPPORT void setTime_t(uint secsSince1Jan1970UTC, Qt::TimeSpec spec) {
  220.         setTime_t(secsSince1Jan1970UTC);
  221.         if (spec == Qt::UTC)
  222.             *this = toUTC();
  223.     }
  224.     static inline QT3_SUPPORT QDateTime currentDateTime(Qt::TimeSpec spec) {
  225.         if (spec == Qt::LocalTime)
  226.             return currentDateTime();
  227.         else
  228.             return currentDateTime().toUTC();
  229.     }
  230.     
  231. #endif
  232. private:
  233.     friend class QDateTimePrivate;
  234.     void detach();
  235.     QDateTimePrivate *d;
  236. #ifndef QT_NO_DATASTREAM
  237.     friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QDateTime &);
  238.     friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QDateTime &);
  239. #endif
  240. };
  241. Q_DECLARE_TYPEINFO(QDateTime, Q_MOVABLE_TYPE);
  242. #ifdef QT3_SUPPORT
  243. inline QDate QDate::currentDate(Qt::TimeSpec spec)
  244. {
  245.     if (spec == Qt::LocalTime)
  246.         return currentDate();
  247.     else
  248.         return QDateTime::currentDateTime().toUTC().date();
  249. }
  250. inline QTime QTime::currentTime(Qt::TimeSpec spec)
  251. {
  252.     if (spec == Qt::LocalTime)
  253.         return currentTime();
  254.     else
  255.         return QDateTime::currentDateTime().toUTC().time();
  256. }
  257. #endif
  258. #ifndef QT_NO_DATASTREAM
  259. Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QDate &);
  260. Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QDate &);
  261. Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QTime &);
  262. Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QTime &);
  263. Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QDateTime &);
  264. Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QDateTime &);
  265. #endif // QT_NO_DATASTREAM
  266. #if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_NO_DATESTRING)
  267. Q_CORE_EXPORT QDebug operator<<(QDebug, const QDate &);
  268. Q_CORE_EXPORT QDebug operator<<(QDebug, const QTime &);
  269. Q_CORE_EXPORT QDebug operator<<(QDebug, const QDateTime &);
  270. #endif
  271. QT_END_NAMESPACE
  272. QT_END_HEADER
  273. #endif // QDATETIME_H