f0d7b0fcff
$ LANG=el_GR.UTF-8 ./timedatectl Local time: Σαβ 2012-11-24 14:53:05 CET Universal time: Σαβ 2012-11-24 13:53:05 UTC RTC time: Σαβ 2012-11-24 13:53:04 Timezone: Europe/Berlin (CET, +0100) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: no Last DST change: DST ended at Κυρ 2012-10-28 02:59:59 CEST Κυρ 2012-10-28 02:00:00 CET Next DST change: DST begins (the clock jumps one hour forward) at Κυρ 2013-03-31 01:59:59 CET Κυρ 2013-03-31 03:00:00 CEST https://bugs.freedesktop.org/show_bug.cgi?id=57470
84 lines
2.7 KiB
C
84 lines
2.7 KiB
C
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
|
|
|
#pragma once
|
|
|
|
/***
|
|
This file is part of systemd.
|
|
|
|
Copyright 2010 Lennart Poettering
|
|
|
|
systemd is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU Lesser General Public License as published by
|
|
the Free Software Foundation; either version 2.1 of the License, or
|
|
(at your option) any later version.
|
|
|
|
systemd is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
|
***/
|
|
|
|
#include <stdio.h>
|
|
|
|
typedef uint64_t usec_t;
|
|
typedef uint64_t nsec_t;
|
|
|
|
#include "macro.h"
|
|
|
|
typedef struct dual_timestamp {
|
|
usec_t realtime;
|
|
usec_t monotonic;
|
|
} dual_timestamp;
|
|
|
|
#define MSEC_PER_SEC 1000ULL
|
|
#define USEC_PER_SEC 1000000ULL
|
|
#define USEC_PER_MSEC 1000ULL
|
|
#define NSEC_PER_SEC 1000000000ULL
|
|
#define NSEC_PER_MSEC 1000000ULL
|
|
#define NSEC_PER_USEC 1000ULL
|
|
|
|
#define USEC_PER_MINUTE (60ULL*USEC_PER_SEC)
|
|
#define NSEC_PER_MINUTE (60ULL*NSEC_PER_SEC)
|
|
#define USEC_PER_HOUR (60ULL*USEC_PER_MINUTE)
|
|
#define NSEC_PER_HOUR (60ULL*NSEC_PER_MINUTE)
|
|
#define USEC_PER_DAY (24ULL*USEC_PER_HOUR)
|
|
#define NSEC_PER_DAY (24ULL*NSEC_PER_HOUR)
|
|
#define USEC_PER_WEEK (7ULL*USEC_PER_DAY)
|
|
#define NSEC_PER_WEEK (7ULL*NSEC_PER_DAY)
|
|
#define USEC_PER_MONTH (2629800ULL*USEC_PER_SEC)
|
|
#define NSEC_PER_MONTH (2629800ULL*NSEC_PER_SEC)
|
|
#define USEC_PER_YEAR (31557600ULL*USEC_PER_SEC)
|
|
#define NSEC_PER_YEAR (31557600ULL*NSEC_PER_SEC)
|
|
|
|
#define FORMAT_TIMESTAMP_MAX ((4*4+1)+11+9+4+1) /* weekdays can be unicode */
|
|
#define FORMAT_TIMESTAMP_RELATIVE_MAX 256
|
|
#define FORMAT_TIMESPAN_MAX 64
|
|
|
|
usec_t now(clockid_t clock);
|
|
|
|
dual_timestamp* dual_timestamp_get(dual_timestamp *ts);
|
|
dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u);
|
|
|
|
#define dual_timestamp_is_set(ts) ((ts)->realtime > 0)
|
|
|
|
usec_t timespec_load(const struct timespec *ts);
|
|
struct timespec *timespec_store(struct timespec *ts, usec_t u);
|
|
|
|
usec_t timeval_load(const struct timeval *tv);
|
|
struct timeval *timeval_store(struct timeval *tv, usec_t u);
|
|
|
|
char *format_timestamp(char *buf, size_t l, usec_t t);
|
|
char *format_timestamp_relative(char *buf, size_t l, usec_t t);
|
|
char *format_timespan(char *buf, size_t l, usec_t t);
|
|
|
|
void dual_timestamp_serialize(FILE *f, const char *name, dual_timestamp *t);
|
|
void dual_timestamp_deserialize(const char *value, dual_timestamp *t);
|
|
|
|
int parse_timestamp(const char *t, usec_t *usec);
|
|
|
|
int parse_usec(const char *t, usec_t *usec);
|
|
int parse_nsec(const char *t, nsec_t *nsec);
|