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

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?

UserRevisionLine numberNew 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