summaryrefslogtreecommitdiff
path: root/library/timestring.h
blob: 875c8bf25fb20bd267458d477590b3b5e601d57d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/**********************************************************************
** Copyright (C) 2000-2002 Trolltech AS.  All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** 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.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/

#ifndef _TIMESTRING_H_
#define _TIMESTRING_H_
#include <qdatetime.h>
#include <qstring.h>

#if (QT_VERSION-0 >= 0x030000)
#define DateFormat QPEDateFormat
#endif

// return a string with the time based on whether or not you want
// you want it in 12 hour form.   if ampm is true, then return
// it in 12 hour (am/pm) form otherwise return it in 24 hour form
// in theory Qt 3,0 handles this better (hopefully obsoleteing this)
class DateFormat
{
public:
    // date format type 001,010,100 = day month year
    enum Order {
	DayMonthYear = 0x0111, // 0x001 + 0x010(0x2 << 3) + 0x100(0x4 << 3)
	MonthDayYear = 0x010A,
	YearMonthDay = 0x0054
    };

    DateFormat(QChar s = '/', Order so = MonthDayYear) : _shortOrder(so),
        _longOrder(so), _shortSeparator(s) { }
    DateFormat(QChar s, Order so, Order lo) :  _shortOrder(so),
        _longOrder(lo), _shortSeparator(s) { }
    DateFormat(const DateFormat &o) : _shortOrder(o._shortOrder),
        _longOrder(o._longOrder), _shortSeparator(o._shortSeparator) { }

    bool operator==(const DateFormat &o)
    {
	if (o._shortOrder == _shortOrder && o._longOrder == _longOrder &&
		o._shortSeparator == _shortSeparator)
	    return TRUE;
	return FALSE;
    }

    // verbosity specifiers
    enum Verbosity {
	shortNumber = 0x01, // default
	longNumber  = 0x02,

	padNumber = 0x04,

	shortWord = 0x08, // default
	longWord = 0x10,

	showWeekDay = 0x20
    };

    QString toNumberString() const; // the M/D/Y string.
    QString toWordString() const; // the Month day, year string.

    QString numberDate(const QDate &d, int v = 0) const;
    QString wordDate(const QDate &d, int v = 0) const;

#ifndef QT_NO_DATASTREAM
    void load(QDataStream&);
    void save(QDataStream&) const;
#endif

    QChar separator() const { return _shortSeparator; };
    Order shortOrder() const { return _shortOrder; };
    Order longOrder() const { return _longOrder; };

private:
    Order _shortOrder;
    Order _longOrder;
    QChar _shortSeparator;
};

#ifndef QT_NO_DATASTREAM
QDataStream &operator<<(QDataStream &s, const DateFormat&df);
QDataStream &operator>>(QDataStream &s, DateFormat&df);
#endif

class TimeString
{
public:

    //enum DateFormat { MonthDayYear, DayMonthYear, ISO8601,
		      //YearMonthDay = ISO8601 };

/**
 * @name Convience functions which use currentDateFormat
 */
//@{
    static QString shortDate( const QDate &d )
    { return shortDate( d, currentDateFormat() ); }
    static QString dateString( const QDate &d )
    { return dateString( d, currentDateFormat() ); }
    static QString longDateString( const QDate &d )
    { return longDateString( d, currentDateFormat() ); }
//@}
    static QString dateString( const QDateTime &dt, bool ampm, bool seconds )
    { return dateString( dt, ampm, seconds, currentDateFormat() ); }


   /** @name Do not use as they don't honor system settings for AMPM
    *
    */
    //@{
    static QString dateString( const QDateTime &t, bool ampm = false );
    static QString timeString( const QTime &t, bool ampm, bool seconds );
    static QString timeString( const QTime &t, bool ampm = false );
    static QString shortTime( bool ampm, bool seconds );
    static QString shortTime( bool ampm = false );
    //@}

    static QString numberDateString( const QDate &d, DateFormat );
    static QString numberDateString( const QDate &d )
    { return numberDateString( d, currentDateFormat() ); }
    static QString longNumberDateString( const QDate &d, DateFormat );
    static QString longNumberDateString( const QDate &d )
    { return longNumberDateString( d, currentDateFormat() ); }

    static QString shortDate( const QDate &, DateFormat );
    static QString dateString( const QDate &, DateFormat  );
    static QString longDateString( const QDate &, DateFormat );

    static DateFormat currentDateFormat();

private:
    static QString dateString( const QDateTime &t, bool ampm, bool seconds, DateFormat );


};

#endif