pacemaker  1.1.18-7fdfbbe
Scalable High-Availability cluster resource manager
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
iso8601.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2005 Andrew Beekhof <andrew@beekhof.net>
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This software is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
25 /*
26  * http://en.wikipedia.org/wiki/ISO_8601
27  *
28  */
29 
30 #ifndef CRM_COMMON_ISO8601
31 # define CRM_COMMON_ISO8601
32 
33 # include <time.h>
34 # include <ctype.h>
35 # include <stdbool.h>
36 
37 typedef struct crm_time_s crm_time_t;
38 
39 typedef struct crm_time_period_s {
44 
45 /* Creates a new date/time object conforming to iso8601:
46  * http://en.wikipedia.org/wiki/ISO_8601
47  *
48  * Eg.
49  * Ordinal: 2010-01 12:00:00 +10:00
50  * Gregorian: 2010-01-01 12:00:00 +10:00
51  * ISO Week: 2010-W53-6 12:00:00 +10:00
52  *
53  * Notes:
54  * Only one of date, time is required
55  * If date or timezone is unspecified, they default to the current one
56  * Supplying NULL results in the current date/time
57  * Dashes may be ommitted from dates
58  * Colons may be ommitted from times and timezones
59  * A timezone of 'Z' denoted UTC time
60  */
61 crm_time_t *crm_time_new(const char *string);
62 void crm_time_free(crm_time_t * dt);
63 
64 char *crm_time_as_string(crm_time_t * dt, int flags);
65 
66 # define crm_time_log(level, prefix, dt, flags) crm_time_log_alias(level, __FILE__, __FUNCTION__, __LINE__, prefix, dt, flags)
67 void crm_time_log_alias(int log_level, const char *file, const char *function, int line,
68  const char *prefix, crm_time_t * date_time, int flags);
69 
70 # define crm_time_log_date 0x001
71 # define crm_time_log_timeofday 0x002
72 # define crm_time_log_with_timezone 0x004
73 # define crm_time_log_duration 0x008
74 
75 # define crm_time_ordinal 0x010
76 # define crm_time_weeks 0x020
77 # define crm_time_seconds 0x100
78 # define crm_time_epoch 0x200
79 
80 crm_time_t *crm_time_parse_duration(const char *duration_str);
82 crm_time_period_t *crm_time_parse_period(const char *period_str);
83 
84 int crm_time_compare(crm_time_t * dt, crm_time_t * rhs);
85 
91 
92 /* Time in seconds since 0000-01-01 00:00:00Z */
93 long long int crm_time_get_seconds(crm_time_t * dt);
94 
95 /* Time in seconds since 1970-01-01 00:00:00Z */
97 
98 void crm_time_set(crm_time_t * target, crm_time_t * source);
99 void crm_time_set_timet(crm_time_t * target, time_t * source);
100 
101 /* Returns a new time object */
104 
105 /* All crm_time_add_... functions support negative values */
106 void crm_time_add_seconds(crm_time_t * dt, int value);
107 void crm_time_add_minutes(crm_time_t * dt, int value);
108 void crm_time_add_hours(crm_time_t * dt, int value);
109 void crm_time_add_days(crm_time_t * dt, int value);
110 void crm_time_add_weekdays(crm_time_t * dt, int value);
111 void crm_time_add_weeks(crm_time_t * dt, int value);
112 void crm_time_add_months(crm_time_t * dt, int value);
113 void crm_time_add_years(crm_time_t * dt, int value);
114 void crm_time_add_ordinalyears(crm_time_t * dt, int value);
115 void crm_time_add_weekyears(crm_time_t * dt, int value);
116 
117 /* Useful helper functions */
118 int crm_time_january1_weekday(int year);
119 int crm_time_weeks_in_year(int year);
120 int crm_time_days_in_month(int month, int year);
121 
122 bool crm_time_leapyear(int year);
123 bool crm_time_check(crm_time_t * dt);
124 
125 #endif
void crm_time_add_years(crm_time_t *dt, int value)
Definition: iso8601.c:1283
void crm_time_add_seconds(crm_time_t *dt, int value)
Definition: iso8601.c:1177
void crm_time_add_weekdays(crm_time_t *dt, int value)
struct crm_time_s crm_time_t
Definition: iso8601.h:37
crm_time_period_t * crm_time_parse_period(const char *period_str)
Definition: iso8601.c:905
int crm_time_weeks_in_year(int year)
Definition: iso8601.c:157
int crm_time_get_timezone(crm_time_t *dt, uint32_t *h, uint32_t *m)
int crm_time_get_ordinal(crm_time_t *dt, uint32_t *y, uint32_t *d)
crm_time_t * crm_time_parse_duration(const char *duration_str)
Definition: iso8601.c:833
void crm_time_add_hours(crm_time_t *dt, int value)
Definition: iso8601.c:1271
void crm_time_add_weekyears(crm_time_t *dt, int value)
void crm_time_add_weeks(crm_time_t *dt, int value)
Definition: iso8601.c:1277
bool crm_time_leapyear(int year)
Definition: iso8601.c:188
crm_time_t * crm_time_calculate_duration(crm_time_t *dt, crm_time_t *value)
Definition: iso8601.c:1073
crm_time_t * start
Definition: iso8601.h:40
void crm_time_add_months(crm_time_t *dt, int value)
Definition: iso8601.c:1223
void crm_time_set_timet(crm_time_t *target, time_t *source)
Definition: iso8601.c:1045
crm_time_t * end
Definition: iso8601.h:41
void crm_time_add_ordinalyears(crm_time_t *dt, int value)
long long int crm_time_get_seconds_since_epoch(crm_time_t *dt)
Definition: iso8601.c:306
void crm_time_add_minutes(crm_time_t *dt, int value)
Definition: iso8601.c:1265
crm_time_t * diff
Definition: iso8601.h:42
int crm_time_january1_weekday(int year)
Definition: iso8601.c:144
struct crm_time_period_s crm_time_period_t
long long int crm_time_get_seconds(crm_time_t *dt)
Definition: iso8601.c:270
crm_time_t * crm_time_add(crm_time_t *dt, crm_time_t *value)
Definition: iso8601.c:1051
int crm_time_get_gregorian(crm_time_t *dt, uint32_t *y, uint32_t *m, uint32_t *d)
int crm_time_get_timeofday(crm_time_t *dt, uint32_t *h, uint32_t *m, uint32_t *s)
void crm_time_set(crm_time_t *target, crm_time_t *source)
Definition: iso8601.c:983
void crm_time_log_alias(int log_level, const char *file, const char *function, int line, const char *prefix, crm_time_t *date_time, int flags)
Definition: iso8601.c:213
crm_time_t * crm_time_new(const char *string)
Definition: iso8601.c:99
#define uint32_t
Definition: stdint.in.h:158
int crm_time_compare(crm_time_t *dt, crm_time_t *rhs)
Definition: iso8601.c:1150
bool crm_time_check(crm_time_t *dt)
Definition: iso8601.c:1118
crm_time_t * crm_time_subtract(crm_time_t *dt, crm_time_t *value)
Definition: iso8601.c:1096
char * crm_time_as_string(crm_time_t *dt, int flags)
Definition: iso8601.c:408
int crm_time_get_isoweek(crm_time_t *dt, uint32_t *y, uint32_t *w, uint32_t *d)
void crm_time_add_days(crm_time_t *dt, int value)
Definition: iso8601.c:1198
uint64_t flags
Definition: remote.c:156
int crm_time_days_in_month(int month, int year)
Definition: iso8601.c:179
void crm_time_free(crm_time_t *dt)
Definition: iso8601.c:116