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

Committer:
hlipka
Date:
2010-12-22
Revision:
0:ab93db24fcc8
Child:
1:81f7dd124217

File content as of revision 0:ab93db24fcc8:

#ifndef __TIME_H_
#define __TIME_H_

#include <time.h>
#include "stdio.h"
#include "string.h"
#include <list>

class Time;

class TimeStamp {
    friend class Time;
public:
    int getYear() {
        return _tm.tm_year+1900;
    };

    int getMonth() {
        return _tm.tm_mon;
    };

    int getDay() {
        return _tm.tm_mday;
    };

    int getHour() {
        return _tm.tm_hour;
    };

    int getMinute() {
        return _tm.tm_min;
    };

    int getSecond() {
        return _tm.tm_sec;
    };

    int getDayOfWeek() {
        int dow=_tm.tm_wday;
        dow--;
        if (dow==-1)
            dow=6;
        return dow;
    };

    int getDayOfYear() {
        return _tm.tm_yday;
    };

    TimeStamp(time_t unixTime) {
        updateTime(unixTime);
    };

    ~TimeStamp() {
    };
    bool isSame(TimeStamp* ts);
    bool isBefore(TimeStamp* ts);
    bool isAfter(TimeStamp* ts);
private:
    void updateTime(time_t unixTime) {
        struct tm *time;
        time=localtime(&unixTime);
        memcpy(&_tm, time, sizeof(_tm));
    }
    TimeStamp(int year, int mon, int day, int hour, int min, int sec)
    {
        _tm.tm_year=year-1900;
        _tm.tm_mon=mon;
        _tm.tm_mday=day;
        _tm.tm_hour=hour;
        _tm.tm_min=min;
        _tm.tm_sec=sec;
    }

    struct tm _tm;
};

class TimeZoneEntry;

class Time {
public:
    Time();
    ~Time();
    TimeStamp* getTime();
    long getUnixTime();
private:
    static std::list<TimeZoneEntry*> *_timeZoneEntries;
    void readTimeZones();
};

#endif