libcproject
C static library easier to use than libc (C standard library).
date.h
Go to the documentation of this file.
1 #ifndef __LIBCPROJECT_DATE__
2 #define __LIBCPROJECT_DATE__
3 
4 #include <errno.h>
5 #include <stdbool.h>
6 #include <stdint.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 
10 #include "convert.h"
11 #include "mathematics.h"
12 #include "string.h"
13 #include "types.h"
14 
15 #define SECONDS_PER_MINUTE 60
16 #define SECONDS_PER_HOUR (60 * SECONDS_PER_MINUTE)
17 #define SECONDS_PER_DAY (24 * SECONDS_PER_HOUR)
18 #define MILLISECONDS_PER_SECOND 1000
19 
24 struct date {
30  uint16_t year;
31 
36  uint8_t month;
37 
42  uint8_t day;
43 
48  uint8_t hours;
49 
54  uint8_t minutes;
55 
60  uint8_t seconds;
61 
66  uint16_t milliseconds;
67 
73 };
74 
82 struct date *date_copy(struct date *date_to_copy);
83 
92 
101 
110 
119 
128 
137 
146 
155 
164 
178 
192 
202 struct date *date_from_iso_string(string_t iso_string);
203 
211 uint8_t date_get_days_of_month(uint8_t month, uint16_t year);
212 
234 
243 
252 
260 uint64_t date_convert_days_to_seconds(uint64_t days);
261 
271 uint64_t date_convert_hms_to_seconds(uint8_t hours, uint8_t minutes, uint8_t seconds);
272 
280 uint64_t date_to_total_seconds(struct date *date);
281 
290 uint64_t date_duration_seconds_between_2_dates(struct date *date1, struct date *date2);
291 
301 void date_add_hours(struct date *date, int64_t hours);
302 
312 void date_add_days(struct date *date, int64_t days);
313 
322 void date_to_utc(struct date *date);
323 
324 #endif
void date_add_hours(struct date *date, int64_t hours)
Add hours to the date, managing the day, month, year changes if necessary.
uint64_t date_to_total_seconds(struct date *date)
Convert a date to total seconds.
uint64_t date_convert_hms_to_seconds(uint8_t hours, uint8_t minutes, uint8_t seconds)
Convert hours, minutes, and seconds to seconds.
uint64_t date_duration_seconds_between_2_dates(struct date *date1, struct date *date2)
Calculate the duration in seconds between 2 dates.
uint16_t milliseconds
Definition: date.h:66
struct date * date_copy(struct date *date_to_copy)
Return the copy of a date.
uint8_t hours
Definition: date.h:48
uint64_t date_convert_milliseconds_to_seconds(uint16_t milliseconds)
Convert milliseconds to seconds.
bool date_get_is_valid(struct date *date)
Check if the date is valid (all fields are possible).
uint16_t year
Definition: date.h:30
bool date_get_is_leap_year(uint16_t year)
Determine if a year is a leap year.
string_t date_to_iso_string(struct date *date)
String representing the date in the date time string format, a simplified format based on ISO 8601,...
bool date_get_is_valid_year(uint16_t year)
Check if a year is valid, between [0, 9999] (inclusive).
bool date_get_is_valid_milliseconds(uint16_t milliseconds)
Check if milliseconds are valid, between [0, 999] (inclusive).
struct date * date_from_iso_string(string_t iso_string)
Create a date from an ISO 8601 string, with the format YYYY-MM-DDTHH:mm:ss.sssZ.
uint8_t seconds
Definition: date.h:60
uint8_t month
Definition: date.h:36
bool date_get_is_valid_month(uint8_t month)
Check if a month is valid, between [1, 12] (inclusive).
uint8_t minutes
Definition: date.h:54
bool date_get_is_valid_hours(uint8_t hours)
Check if hours are valid, between [0, 23] (inclusive).
bool date_get_is_valid_seconds(uint8_t seconds)
Check if seconds are valid, between [0, 59] (inclusive).
uint64_t date_convert_days_to_seconds(uint64_t days)
Convert days to seconds.
uint64_t date_convert_seconds_to_milliseconds(uint64_t seconds)
Convert seconds to milliseconds.
bool date_get_is_valid_timezone_utc_offset(int8_t timezone_utc_offset)
Check if the timezone UTC offset is valid, between [-12, 14] (inclusive).
bool date_get_is_valid_minutes(uint8_t minutes)
Check if minutes are valid, between [0, 59] (inclusive).
void date_add_days(struct date *date, int64_t days)
Adds days to the date, managing month and year changes as needed.
bool date_get_is_valid_day(uint8_t day)
Check if a day is valid, between [1, 31] (inclusive).
void date_to_utc(struct date *date)
Transform the date with a Timezone UTC Offset to UTC (timezone_utc_offset = 0).
string_t date_to_iso_string_without_time(struct date *date)
String representing the date in the ISO 8601 format, without time information (YYYY-MM-DD).
uint8_t date_get_days_of_month(uint8_t month, uint16_t year)
Get number of days in one month [1, 12].
uint8_t day
Definition: date.h:42
int8_t timezone_utc_offset
Definition: date.h:72
Date object representing a single moment in time.
Definition: date.h:24
char * string_t
Definition: types.h:8