]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/time-util.h
core: fix %U when no User= used
[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>
25
26typedef uint64_t usec_t;
27typedef uint64_t nsec_t;
28
29#include "macro.h"
30
31typedef struct dual_timestamp {
32 usec_t realtime;
33 usec_t monotonic;
34} dual_timestamp;
35
36#define MSEC_PER_SEC 1000ULL
37#define USEC_PER_SEC 1000000ULL
38#define USEC_PER_MSEC 1000ULL
39#define NSEC_PER_SEC 1000000000ULL
40#define NSEC_PER_MSEC 1000000ULL
41#define NSEC_PER_USEC 1000ULL
42
43#define USEC_PER_MINUTE (60ULL*USEC_PER_SEC)
44#define NSEC_PER_MINUTE (60ULL*NSEC_PER_SEC)
45#define USEC_PER_HOUR (60ULL*USEC_PER_MINUTE)
46#define NSEC_PER_HOUR (60ULL*NSEC_PER_MINUTE)
47#define USEC_PER_DAY (24ULL*USEC_PER_HOUR)
48#define NSEC_PER_DAY (24ULL*NSEC_PER_HOUR)
49#define USEC_PER_WEEK (7ULL*USEC_PER_DAY)
50#define NSEC_PER_WEEK (7ULL*NSEC_PER_DAY)
51#define USEC_PER_MONTH (2629800ULL*USEC_PER_SEC)
52#define NSEC_PER_MONTH (2629800ULL*NSEC_PER_SEC)
53#define USEC_PER_YEAR (31557600ULL*USEC_PER_SEC)
54#define NSEC_PER_YEAR (31557600ULL*NSEC_PER_SEC)
55
f0d7b0fc 56#define FORMAT_TIMESTAMP_MAX ((4*4+1)+11+9+4+1) /* weekdays can be unicode */
9185c8e6 57#define FORMAT_TIMESTAMP_RELATIVE_MAX 256
9a98c7a1
LP
58#define FORMAT_TIMESPAN_MAX 64
59
60usec_t now(clockid_t clock);
61
62dual_timestamp* dual_timestamp_get(dual_timestamp *ts);
63dual_timestamp* dual_timestamp_from_realtime(dual_timestamp *ts, usec_t u);
cae0c5e0 64dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u);
9a98c7a1
LP
65
66#define dual_timestamp_is_set(ts) ((ts)->realtime > 0)
67
68usec_t timespec_load(const struct timespec *ts);
69struct timespec *timespec_store(struct timespec *ts, usec_t u);
70
71usec_t timeval_load(const struct timeval *tv);
72struct timeval *timeval_store(struct timeval *tv, usec_t u);
73
74char *format_timestamp(char *buf, size_t l, usec_t t);
bbb8486e 75char *format_timestamp_relative(char *buf, size_t l, usec_t t);
9a98c7a1
LP
76char *format_timespan(char *buf, size_t l, usec_t t);
77
78void dual_timestamp_serialize(FILE *f, const char *name, dual_timestamp *t);
79void dual_timestamp_deserialize(const char *value, dual_timestamp *t);
80
81int parse_timestamp(const char *t, usec_t *usec);
82
83int parse_usec(const char *t, usec_t *usec);
84int parse_nsec(const char *t, nsec_t *nsec);