Page Menu
Home
ClusterLabs Projects
Search
Configure Global Search
Log In
Files
F4623385
iso8601.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
iso8601.h
View Options
/*
* Copyright 2005-2020 the Pacemaker project contributors
*
* The version control history for this file may have further details.
*
* This source code is licensed under the GNU Lesser General Public License
* version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
*/
#ifndef PCMK__CRM_COMMON_ISO8601__H
# define PCMK__CRM_COMMON_ISO8601__H
# include <time.h>
# include <ctype.h>
# include <stdint.h> // uint32_t
# include <stdbool.h> // bool
#ifdef __cplusplus
extern "C" {
#endif
/**
* \file
* \brief ISO_8601 Date handling
* \ingroup date
*/
/*
* See https://en.wikipedia.org/wiki/ISO_8601
*/
typedef struct crm_time_s crm_time_t;
typedef struct crm_time_period_s {
crm_time_t *start;
crm_time_t *end;
crm_time_t *diff;
} crm_time_period_t;
/* Creates a new date/time object conforming to ISO 8601, for example:
* Ordinal: 2010-01 12:00:00 +10:00
* Gregorian: 2010-01-01 12:00:00 +10:00
* ISO Week: 2010-W53-6 12:00:00 +10:00
*
* Notes:
* Only one of date, time is required
* If date or timezone is unspecified, they default to the current one
* Supplying NULL results in the current date/time
* Dashes may be omitted from dates
* Colons may be omitted from times and timezones
* A timezone of 'Z' denotes UTC time
*/
crm_time_t *crm_time_new(const char *string);
crm_time_t *crm_time_new_undefined(void);
void crm_time_free(crm_time_t * dt);
bool crm_time_is_defined(const crm_time_t *t);
char *crm_time_as_string(const crm_time_t *dt, int flags);
#define crm_time_log(level, prefix, dt, flags) \
crm_time_log_alias(level, __FILE__, __func__, __LINE__, prefix, dt, flags)
void crm_time_log_alias(int log_level, const char *file, const char *function,
int line, const char *prefix,
const crm_time_t *date_time, int flags);
# define crm_time_log_date 0x001
# define crm_time_log_timeofday 0x002
# define crm_time_log_with_timezone 0x004
# define crm_time_log_duration 0x008
# define crm_time_ordinal 0x010
# define crm_time_weeks 0x020
# define crm_time_seconds 0x100
# define crm_time_epoch 0x200
crm_time_t *crm_time_parse_duration(const char *duration_str);
crm_time_t *crm_time_calculate_duration(const crm_time_t *dt,
const crm_time_t *value);
crm_time_period_t *crm_time_parse_period(const char *period_str);
void crm_time_free_period(crm_time_period_t *period);
int crm_time_compare(const crm_time_t *a, const crm_time_t *b);
int crm_time_get_timeofday(const crm_time_t *dt, uint32_t *h, uint32_t *m,
uint32_t *s);
int crm_time_get_timezone(const crm_time_t *dt, uint32_t *h, uint32_t *m);
int crm_time_get_gregorian(const crm_time_t *dt, uint32_t *y, uint32_t *m,
uint32_t *d);
int crm_time_get_ordinal(const crm_time_t *dt, uint32_t *y, uint32_t *d);
int crm_time_get_isoweek(const crm_time_t *dt, uint32_t *y, uint32_t *w,
uint32_t * d);
/* Time in seconds since 0000-01-01 00:00:00Z */
long long crm_time_get_seconds(const crm_time_t *dt);
/* Time in seconds since 1970-01-01 00:00:00Z */
long long crm_time_get_seconds_since_epoch(const crm_time_t *dt);
void crm_time_set(crm_time_t *target, const crm_time_t *source);
void crm_time_set_timet(crm_time_t *target, const time_t *source);
/* Returns a new time object */
crm_time_t *pcmk_copy_time(const crm_time_t *source);
crm_time_t *crm_time_add(const crm_time_t *dt, const crm_time_t *value);
crm_time_t *crm_time_subtract(const crm_time_t *dt, const crm_time_t *value);
/* All crm_time_add_... functions support negative values */
void crm_time_add_seconds(crm_time_t * dt, int value);
void crm_time_add_minutes(crm_time_t * dt, int value);
void crm_time_add_hours(crm_time_t * dt, int value);
void crm_time_add_days(crm_time_t * dt, int value);
void crm_time_add_weeks(crm_time_t * dt, int value);
void crm_time_add_months(crm_time_t * dt, int value);
void crm_time_add_years(crm_time_t * dt, int value);
/* Useful helper functions */
int crm_time_january1_weekday(int year);
int crm_time_weeks_in_year(int year);
int crm_time_days_in_month(int month, int year);
bool crm_time_leapyear(int year);
bool crm_time_check(const crm_time_t *dt);
#ifdef __cplusplus
}
#endif
#endif
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Tue, Jul 8, 3:23 PM (14 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2002171
Default Alt Text
iso8601.h (4 KB)
Attached To
Mode
rP Pacemaker
Attached
Detach File
Event Timeline
Log In to Comment