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
|
//
// Tizen Web Device API
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
//
// Licensed under the Apache License, Version 2.0 (the License);
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#ifndef _TZDATE_H_
#define _TZDATE_H_
#include <string>
#include <ctime>
#include <unicode/calendar.h>
#include <unicode/timezone.h>
#include "TZDateProperties.h"
#include "DurationProperties.h"
namespace DeviceAPI {
namespace Time {
class TZDate
{
public:
enum TZDateFields {
TZDATE_ERA,
TZDATE_YEAR,
TZDATE_MONTH,
TZDATE_WEEK_OF_YEAR,
TZDATE_WEEK_OF_MONTH,
TZDATE_DATE,
TZDATE_DAY_OF_YEAR,
TZDATE_DAY_OF_WEEK,
TZDATE_DAY_OF_WEEK_IN_MONTH,
TZDATE_AM_PM,
TZDATE_HOUR,
TZDATE_HOUR_OF_DAY,
TZDATE_MINUTE,
TZDATE_SECOND,
TZDATE_MILLISECOND,
TZDATE_ZONE_OFFSET,
TZDATE_DST_OFFSET,
TZDATE_FIELDS_COUNT,
};
enum DSTTransition {
PREV_TRANSITION,
NEXT_TRANSITION
};
TZDate(const bool isNotNull = true);
TZDate(const std::string &timezone);
TZDate(const TZDateProperties &properties);
TZDate(const std::string &dateString, const double milliseconds, const std::string &timezone);
virtual ~TZDate();
bool isNull();
long get(const TZDateFields field);
std::string getTimezone();
TZDateProperties toTimezone(const std::string timezone);
void set(const TZDateFields field, const long value);
long getUTC(const TZDateFields field);
void setUTC(const TZDateFields field, const long value);
long long difference(const TZDateProperties &prop);
TZDateProperties addDuration(const DurationProperties &duration);
std::string getUTCTimezoneName();
std::string getLocalTimezoneName();
TZDateProperties makeProperties();
double getTime();
bool setTime(const double time);
std::string toDateString(bool bLocale = false) ;
std::string toTimeString(bool bLocale = false);
std::string toString(bool bLocale = false);
std::string getTimezoneAbbreviation();
long secondsFromUTC();
bool isDST();
TZDateProperties getDSTTransition(DSTTransition trans);
bool isAvailableTimezone(const std::string &timezone);
bool isAvailableTimezone(icu::TimeZone *tz);
private:
long _get(const TZDateFields field, icu::Calendar *cal);
void _set(const TZDateFields field, const long value, icu::Calendar *cal);
std::string _getTimezoneName(icu::Calendar *cal);
const UCalendarDateFields _convertDateField(const TZDateFields field);
icu::Calendar * _makeCalendar(const std::string &timezone);
icu::Calendar * _makeCalendar(const TZDateProperties &properties);
TZDateProperties _makeProperties(icu::Calendar *cal);
icu::Calendar *myCalendar;
};
typedef DPL::SharedPtr<TZDate> TZDatePtr;
}
}
#endif /* _DATETIME_H_ */
|