]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/time-util.h
util: make time formatting a bit smarter
[thirdparty/systemd.git] / src / shared / time-util.h
CommitLineData
9a98c7a1
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#pragma once
4
5/***
6 This file is part of systemd.
7
8 Copyright 2010 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
24#include <stdio.h>
cb0dac05 25#include <inttypes.h>
9a98c7a1
LP
26
27typedef uint64_t usec_t;
28typedef uint64_t nsec_t;
29
30#include "macro.h"
31
32typedef struct dual_timestamp {
33 usec_t realtime;
34 usec_t monotonic;
35} dual_timestamp;
36
37#define MSEC_PER_SEC 1000ULL
38#define USEC_PER_SEC 1000000ULL
39#define USEC_PER_MSEC 1000ULL
40#define NSEC_PER_SEC 1000000000ULL
41#define NSEC_PER_MSEC 1000000ULL
42#define NSEC_PER_USEC 1000ULL
43
44#define USEC_PER_MINUTE (60ULL*USEC_PER_SEC)
45#define NSEC_PER_MINUTE (60ULL*NSEC_PER_SEC)
46#define USEC_PER_HOUR (60ULL*USEC_PER_MINUTE)
47#define NSEC_PER_HOUR (60ULL*NSEC_PER_MINUTE)
48#define USEC_PER_DAY (24ULL*USEC_PER_HOUR)
49#define NSEC_PER_DAY (24ULL*NSEC_PER_HOUR)
50#define USEC_PER_WEEK (7ULL*USEC_PER_DAY)
51#define NSEC_PER_WEEK (7ULL*NSEC_PER_DAY)
52#define USEC_PER_MONTH (2629800ULL*USEC_PER_SEC)
53#define NSEC_PER_MONTH (2629800ULL*NSEC_PER_SEC)
54#define USEC_PER_YEAR (31557600ULL*USEC_PER_SEC)
55#define NSEC_PER_YEAR (31557600ULL*NSEC_PER_SEC)
56
f0d7b0fc 57#define FORMAT_TIMESTAMP_MAX ((4*4+1)+11+9+4+1) /* weekdays can be unicode */
9185c8e6 58#define FORMAT_TIMESTAMP_RELATIVE_MAX 256
9a98c7a1
LP
59#define FORMAT_TIMESPAN_MAX 64
60
61usec_t now(clockid_t clock);
62
63dual_timestamp* dual_timestamp_get(dual_timestamp *ts);
64dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u);
cae0c5e0 65dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u);
9a98c7a1
LP
66
67#define dual_timestamp_is_set(ts) ((ts)->realtime > 0)
68
69usec_t timespec_load(const struct timespec *ts);
70struct timespec *timespec_store(struct timespec *ts, usec_t u);
71
72usec_t timeval_load(const struct timeval *tv);
73struct timeval *timeval_store(struct timeval *tv, usec_t u);
74
75char *format_timestamp(char *buf, size_t l, usec_t t);
bbb8486e 76char *format_timestamp_relative(char *buf, size_t l, usec_t t);
2fa4092c 77char *format_timespan(char *buf, size_t l, usec_t t, usec_t accuracy);
9a98c7a1
LP
78
79void dual_timestamp_serialize(FILE *f, const char *name, dual_timestamp *t);
80void dual_timestamp_deserialize(const char *value, dual_timestamp *t);
81
82int parse_timestamp(const char *t, usec_t *usec);
83
7f602784 84int parse_sec(const char *t, usec_t *usec);
9a98c7a1 85int parse_nsec(const char *t, nsec_t *nsec);