osd-contiki/apps/time/resource_gmtime.c
Ralf Schlatterbeck 0068611b4d Implement localtime
Now we manage a timezone and daylight-savings aware version of
localtime. We parse UNIX timezone strings. The default (active after the
first call to localtime or localtime_r) is CET/CEST, the timezone of
Europe/Vienna. The wallclock-time osd-example demonstrates how to set a
different timezone via the timezone resource.

Note: After startup no timezone is set. So in this state querying the
timezone resource will return an empty string. After first call to
localtime (if not timezone has been set via the timezone resource) a
query to timezone will return the default timezone string for CET/CEST.

The string returned by the localtime and utc timezones now also includes
the timezone name.

New fields tm_gmtoff and tm_zone were added to the tm structure. These
are available in BSD systems and when setting special compiler
definitions on Linux.

Note: the timezone offset information in the tm structure (tm_gmtoff)
as well as in the tz structure returned by gettimeofday (tz_minuteswest)
may be wrong sign, this code is largely untested.
2016-02-18 09:55:07 +01:00

62 lines
1.2 KiB
C

/**
* \file
* Resource for gmtime (utc) / localtime handling
* \author
* Ralf Schlatterbeck <rsc@runtux.com>
*
* \brief get time as a string in utc or localtime
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "contiki.h"
#include "time.h"
#include "time_resource.h"
#include "jsonparse.h"
#include "er-coap.h"
#include "generic_resource.h"
size_t time_to_string (const char *name, uint8_t is_json, char *buf, size_t bs)
{
struct timeval tv;
struct tm tm;
struct tm *(*method)(const time_t *, struct tm *) = gmtime_r;
if (0 == strcmp (name, "localtime")) {
method = localtime_r;
}
gettimeofday (&tv, NULL);
method (&tv.tv_sec, &tm);
return snprintf
( buf
, bs
, "%s%lu-%02u-%02u %02u:%02u:%02u %s%s"
, is_json ? "\"" : ""
, 1900 + tm.tm_year
, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec
, tm.tm_zone
, is_json ? "\"" : ""
);
}
GENERIC_RESOURCE \
( localtime
, Local time
, formatted time
, NULL
, time_to_string
);
GENERIC_RESOURCE \
( utc
, UTC
, formatted time
, NULL
, time_to_string
);
/*
* VI settings, see coding style
* ex:ts=8:et:sw=2
*/