diff options
Diffstat (limited to 'libkdeedu/extdate/extdatetime.h')
-rw-r--r-- | libkdeedu/extdate/extdatetime.h | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/libkdeedu/extdate/extdatetime.h b/libkdeedu/extdate/extdatetime.h new file mode 100644 index 00000000..e1bc2a79 --- /dev/null +++ b/libkdeedu/extdate/extdatetime.h @@ -0,0 +1,190 @@ +/************************************************************************* +** Definition of extended range date class +** (c) 2004 by Michel Guitel <michel.guitel@sap.ap-hop-paris.fr> +** modifications by Jason Harris <kstars@30doradus.org> +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +**********************************************************************/ + +#ifndef EXTDATETIME_H +#define EXTDATETIME_H + +#include <limits.h> +#include "qstring.h" +#include "qnamespace.h" +#include "qdatetime.h" +#include <kdemacros.h> + +#define INVALID_DAY LONG_MIN + +class ExtDateTime; + +/***************************************************************************** + ExtDate class + *****************************************************************************/ + +extern void test2_unit(int y, int m, int d); + +class ExtDateTime; + +class KDE_EXPORT ExtDate +{ +public: + ExtDate() : m_jd(INVALID_DAY), m_year(0), m_month(0), m_day(0) {} + ExtDate( int y, int m, int d ); + ExtDate( const QDate &q ) { ExtDate( q.year(), q.month(), q.day() ); } + ExtDate( long int jd ); + + bool isNull() const { return m_jd == INVALID_DAY; } + bool isValid() const; + + QDate qdate() const; + + int year() const { return m_year; } + int month() const { return m_month; } + int day() const { return m_day; } + int dayOfWeek() const; + int dayOfYear() const; + int daysInMonth() const; + int daysInYear() const; + int weekNumber( int *yearNum = 0 ) const; + long int jd() const { return m_jd; } + +#ifndef QT_NO_TEXTDATE +#ifndef QT_NO_COMPAT + static QString monthName( int month ) { return shortMonthName( month ); } + static QString dayName( int weekday ) { return shortDayName( weekday ); } +#endif + static QString shortMonthName( int month ); + static QString shortDayName( int weekday ); + static QString longMonthName( int month ); + static QString longDayName( int weekday ); +#endif //QT_NO_TEXTDATE +#ifndef QT_NO_TEXTSTRING +#if !defined(QT_NO_SPRINTF) + QString toString( Qt::DateFormat f = Qt::TextDate ) const; +#endif + QString toString( const QString& format ) const; +#endif + bool setYMD( int y, int m, int d ); + bool setJD( long int _jd ); + + ExtDate addDays( int days ) const; + ExtDate addMonths( int months ) const; + ExtDate addYears( int years ) const; + int daysTo( const ExtDate & ) const; + + bool operator==( const ExtDate &d ) const { return m_jd == d.jd(); } + bool operator!=( const ExtDate &d ) const { return m_jd != d.jd(); } + bool operator<( const ExtDate &d ) const { return m_jd < d.jd(); } + bool operator<=( const ExtDate &d ) const { return m_jd <= d.jd(); } + bool operator>( const ExtDate &d ) const { return m_jd > d.jd(); } + bool operator>=( const ExtDate &d ) const { return m_jd >= d.jd(); } + + static ExtDate currentDate( Qt::TimeSpec ts = Qt::LocalTime ); +#ifndef QT_NO_DATESTRING + static ExtDate fromString( const QString &s ); + static ExtDate fromString( const QString &s, Qt::DateFormat f ); +#endif + static bool isValid( int y, int m, int d ); + static bool leapYear( int year ); + + static long int GregorianToJD( int y, int m, int d ); + static void JDToGregorian( long int jd, int &y, int &m, int &d ); + +private: + static int dayOfYear(int y, int m, int d); + + long int m_jd; + int m_year, m_month, m_day; + static uint m_monthLength[12]; + static uint m_monthOrigin[12]; + static QString m_shortMonthNames[12]; + static QString m_shortDayNames[7]; + static QString m_longMonthNames[12]; + static QString m_longDayNames[7]; + + friend class ExtDateTime; + +#ifndef QT_NO_DATASTREAM + friend Q_EXPORT QDataStream &operator<<( QDataStream &, const ExtDate & ); + friend Q_EXPORT QDataStream &operator>>( QDataStream &, ExtDate & ); + friend Q_EXPORT QDataStream &operator<<( QDataStream &, const ExtDateTime & ); + friend Q_EXPORT QDataStream &operator>>( QDataStream &, ExtDateTime & ); +#endif +}; + +/***************************************************************************** + ExtDateTime class + *****************************************************************************/ + +class KDE_EXPORT ExtDateTime +{ +public: + ExtDateTime() {} // set null date and null time + ExtDateTime( const ExtDate & ); + ExtDateTime( const ExtDate &, const QTime & ); + + bool isNull() const { return d.isNull() && t.isNull(); } + bool isValid() const { return d.isValid() && t.isValid(); } + + ExtDate date() const { return d; } + QTime time() const { return t; } + uint toTime_t() const; + void setDate( const ExtDate &date ) { d = date; } + void setTime( const QTime &time ) { t = time; } + void setTime_t( uint secsSince1Jan1970UTC ); + void setTime_t( uint secsSince1Jan1970UTC, Qt::TimeSpec ); +#ifndef QT_NO_DATESTRING +#ifndef QT_NO_SPRINTF + QString toString( Qt::DateFormat f = Qt::TextDate ) const; +#endif + QString toString( const QString& format ) const; +#endif + ExtDateTime addDays( int days ) const; + ExtDateTime addMonths( int months ) const; + ExtDateTime addYears( int years ) const; + ExtDateTime addSecs( int secs ) const; + int daysTo( const ExtDateTime & ) const; + int secsTo( const ExtDateTime & ) const; + + bool operator==( const ExtDateTime &dt ) const; + bool operator!=( const ExtDateTime &dt ) const; + bool operator<( const ExtDateTime &dt ) const; + bool operator<=( const ExtDateTime &dt ) const; + bool operator>( const ExtDateTime &dt ) const; + bool operator>=( const ExtDateTime &dt ) const; + + static ExtDateTime currentDateTime(); + static ExtDateTime currentDateTime( Qt::TimeSpec ); +#ifndef QT_NO_DATESTRING + static ExtDateTime fromString( const QString &s ); + static ExtDateTime fromString( const QString &s, Qt::DateFormat f ); +#endif +private: + ExtDate d; + QTime t; +#ifndef QT_NO_DATASTREAM + friend Q_EXPORT QDataStream &operator<<( QDataStream &, const ExtDateTime &); + friend Q_EXPORT QDataStream &operator>>( QDataStream &, ExtDateTime & ); +#endif +}; + +/***************************************************************************** + Date and time stream functions + *****************************************************************************/ + +#ifndef QT_NO_DATASTREAM +Q_EXPORT QDataStream &operator<<( QDataStream &, const ExtDate & ); +Q_EXPORT QDataStream &operator>>( QDataStream &, ExtDate & ); +#endif // QT_NO_DATASTREAM + +#endif // EXTDATE_H + |