summaryrefslogtreecommitdiff
path: root/library/timestring.h
blob: 9a2889b05238bb619b15335d5ebac7a88ed6da60 (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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/**********************************************************************
** Copyright (C) 2000-2006 Trolltech AS.  All rights reserved.
**
** This file is part of the Qtopia Environment.
**
** This program is free software; you can redistribute it and/or modify it
** under the terms of the GNU General Public License as published by the
** Free Software Foundation; either version 2 of the License, or (at your
** option) any later version.
**
** A copy of the GNU GPL license version 2 is included in this package as
** LICENSE.GPL.
**
** This program is distributed in the hope that it will be useful, but
** WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU General Public License for more details.
**
** 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>
#include <qarray.h>

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

#include <qtopia/qpeglobal.h>

class QObject;

// 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 1,2,4 = day,month,year
    enum Order {
	DayMonthYear = 0421, // right-to-left
	MonthDayYear = 0412,
	YearMonthDay = 0124
    };

    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 };


//private:
    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() ); }

public:
    enum Length { Short, Medium, Long };
    static QString localH( int hour );
    static QString localHM( const QTime & );
    static QString localHM( const QTime &, Length ); // qtopia 2.1.0
    static QString localHMS( const QTime & );
    static QString localHMDayOfWeek( const QDateTime &t );
    static QString localHMSDayOfWeek( const QDateTime &t );
    static QString localMD( const QDate &, Length=Medium );
    static QString localYMD( const QDate &, Length=Medium );
    static QString localYMDHMS( const QDateTime &, Length=Medium );
    static QString localDayOfWeek( const QDate&, Length=Medium );
    static QString localDayOfWeek( int day1to7, Length=Medium );

    static QString hourString( int hour, bool ampm );
    static bool currentAMPM();
    static DateFormat currentDateFormat();
    static QArray<DateFormat> formatOptions(); // qtopia 1.6.0

    static void connectChange(QObject*,const char* member);
    static void disconnectChange(QObject*,const char* member);

    // Not recommended to call these (they don't honor system 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 );

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


};

#endif