summaryrefslogtreecommitdiff
path: root/mobile_src/TimeUtil/TZDate.h
blob: a7c06eb682f954a59d31b6d504479da8e2b7a2d0 (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
//
// 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_ */