This library takes the current time (which must be set to UTC, e.g. via an NTP call), and applies a timezone definition (loaded at startup) to calculate the local time. This includes the handling of daylight saving. See http://mbed.org/users/hlipka/notebook/time-zone-handling/ for more information (esp. how to get a time zone definition file).
Dependents: CubiScan 000-FIN_youcef 005_ESSAI_youcef
Time.h@0:ab93db24fcc8, 2010-12-22 (annotated)
- Committer:
- hlipka
- Date:
- Wed Dec 22 23:02:21 2010 +0000
- Revision:
- 0:ab93db24fcc8
- Child:
- 1:81f7dd124217
initial version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hlipka | 0:ab93db24fcc8 | 1 | #ifndef __TIME_H_ |
hlipka | 0:ab93db24fcc8 | 2 | #define __TIME_H_ |
hlipka | 0:ab93db24fcc8 | 3 | |
hlipka | 0:ab93db24fcc8 | 4 | #include <time.h> |
hlipka | 0:ab93db24fcc8 | 5 | #include "stdio.h" |
hlipka | 0:ab93db24fcc8 | 6 | #include "string.h" |
hlipka | 0:ab93db24fcc8 | 7 | #include <list> |
hlipka | 0:ab93db24fcc8 | 8 | |
hlipka | 0:ab93db24fcc8 | 9 | class Time; |
hlipka | 0:ab93db24fcc8 | 10 | |
hlipka | 0:ab93db24fcc8 | 11 | class TimeStamp { |
hlipka | 0:ab93db24fcc8 | 12 | friend class Time; |
hlipka | 0:ab93db24fcc8 | 13 | public: |
hlipka | 0:ab93db24fcc8 | 14 | int getYear() { |
hlipka | 0:ab93db24fcc8 | 15 | return _tm.tm_year+1900; |
hlipka | 0:ab93db24fcc8 | 16 | }; |
hlipka | 0:ab93db24fcc8 | 17 | |
hlipka | 0:ab93db24fcc8 | 18 | int getMonth() { |
hlipka | 0:ab93db24fcc8 | 19 | return _tm.tm_mon; |
hlipka | 0:ab93db24fcc8 | 20 | }; |
hlipka | 0:ab93db24fcc8 | 21 | |
hlipka | 0:ab93db24fcc8 | 22 | int getDay() { |
hlipka | 0:ab93db24fcc8 | 23 | return _tm.tm_mday; |
hlipka | 0:ab93db24fcc8 | 24 | }; |
hlipka | 0:ab93db24fcc8 | 25 | |
hlipka | 0:ab93db24fcc8 | 26 | int getHour() { |
hlipka | 0:ab93db24fcc8 | 27 | return _tm.tm_hour; |
hlipka | 0:ab93db24fcc8 | 28 | }; |
hlipka | 0:ab93db24fcc8 | 29 | |
hlipka | 0:ab93db24fcc8 | 30 | int getMinute() { |
hlipka | 0:ab93db24fcc8 | 31 | return _tm.tm_min; |
hlipka | 0:ab93db24fcc8 | 32 | }; |
hlipka | 0:ab93db24fcc8 | 33 | |
hlipka | 0:ab93db24fcc8 | 34 | int getSecond() { |
hlipka | 0:ab93db24fcc8 | 35 | return _tm.tm_sec; |
hlipka | 0:ab93db24fcc8 | 36 | }; |
hlipka | 0:ab93db24fcc8 | 37 | |
hlipka | 0:ab93db24fcc8 | 38 | int getDayOfWeek() { |
hlipka | 0:ab93db24fcc8 | 39 | int dow=_tm.tm_wday; |
hlipka | 0:ab93db24fcc8 | 40 | dow--; |
hlipka | 0:ab93db24fcc8 | 41 | if (dow==-1) |
hlipka | 0:ab93db24fcc8 | 42 | dow=6; |
hlipka | 0:ab93db24fcc8 | 43 | return dow; |
hlipka | 0:ab93db24fcc8 | 44 | }; |
hlipka | 0:ab93db24fcc8 | 45 | |
hlipka | 0:ab93db24fcc8 | 46 | int getDayOfYear() { |
hlipka | 0:ab93db24fcc8 | 47 | return _tm.tm_yday; |
hlipka | 0:ab93db24fcc8 | 48 | }; |
hlipka | 0:ab93db24fcc8 | 49 | |
hlipka | 0:ab93db24fcc8 | 50 | TimeStamp(time_t unixTime) { |
hlipka | 0:ab93db24fcc8 | 51 | updateTime(unixTime); |
hlipka | 0:ab93db24fcc8 | 52 | }; |
hlipka | 0:ab93db24fcc8 | 53 | |
hlipka | 0:ab93db24fcc8 | 54 | ~TimeStamp() { |
hlipka | 0:ab93db24fcc8 | 55 | }; |
hlipka | 0:ab93db24fcc8 | 56 | bool isSame(TimeStamp* ts); |
hlipka | 0:ab93db24fcc8 | 57 | bool isBefore(TimeStamp* ts); |
hlipka | 0:ab93db24fcc8 | 58 | bool isAfter(TimeStamp* ts); |
hlipka | 0:ab93db24fcc8 | 59 | private: |
hlipka | 0:ab93db24fcc8 | 60 | void updateTime(time_t unixTime) { |
hlipka | 0:ab93db24fcc8 | 61 | struct tm *time; |
hlipka | 0:ab93db24fcc8 | 62 | time=localtime(&unixTime); |
hlipka | 0:ab93db24fcc8 | 63 | memcpy(&_tm, time, sizeof(_tm)); |
hlipka | 0:ab93db24fcc8 | 64 | } |
hlipka | 0:ab93db24fcc8 | 65 | TimeStamp(int year, int mon, int day, int hour, int min, int sec) |
hlipka | 0:ab93db24fcc8 | 66 | { |
hlipka | 0:ab93db24fcc8 | 67 | _tm.tm_year=year-1900; |
hlipka | 0:ab93db24fcc8 | 68 | _tm.tm_mon=mon; |
hlipka | 0:ab93db24fcc8 | 69 | _tm.tm_mday=day; |
hlipka | 0:ab93db24fcc8 | 70 | _tm.tm_hour=hour; |
hlipka | 0:ab93db24fcc8 | 71 | _tm.tm_min=min; |
hlipka | 0:ab93db24fcc8 | 72 | _tm.tm_sec=sec; |
hlipka | 0:ab93db24fcc8 | 73 | } |
hlipka | 0:ab93db24fcc8 | 74 | |
hlipka | 0:ab93db24fcc8 | 75 | struct tm _tm; |
hlipka | 0:ab93db24fcc8 | 76 | }; |
hlipka | 0:ab93db24fcc8 | 77 | |
hlipka | 0:ab93db24fcc8 | 78 | class TimeZoneEntry; |
hlipka | 0:ab93db24fcc8 | 79 | |
hlipka | 0:ab93db24fcc8 | 80 | class Time { |
hlipka | 0:ab93db24fcc8 | 81 | public: |
hlipka | 0:ab93db24fcc8 | 82 | Time(); |
hlipka | 0:ab93db24fcc8 | 83 | ~Time(); |
hlipka | 0:ab93db24fcc8 | 84 | TimeStamp* getTime(); |
hlipka | 0:ab93db24fcc8 | 85 | long getUnixTime(); |
hlipka | 0:ab93db24fcc8 | 86 | private: |
hlipka | 0:ab93db24fcc8 | 87 | static std::list<TimeZoneEntry*> *_timeZoneEntries; |
hlipka | 0:ab93db24fcc8 | 88 | void readTimeZones(); |
hlipka | 0:ab93db24fcc8 | 89 | }; |
hlipka | 0:ab93db24fcc8 | 90 | |
hlipka | 0:ab93db24fcc8 | 91 | #endif |