26 #define DT_DATETIME_P "%04d-%02d-%02dT%02d:%02d:%lf+%02d:%02d" 27 #define DT_DATETIME_M "%04d-%02d-%02dT%02d:%02d:%lf-%02d:%02d" 28 #define DT_DATETIME_Z "%04d-%02d-%02dT%02d:%02d:%lfZ" 29 #define DT_TIME_P "%02d:%02d:%lf+%02d:%02d" 30 #define DT_TIME_M "%02d:%02d:%lf-%02d:%02d" 31 #define DT_TIME_Z "%02d:%02d:%lfZ" 32 #define DT_LEGACY "%04d%02d%02dT%02d:%02d:%lf" 41 assert((
int) (date != NULL));
46 memset(&gmt, 0,
sizeof(
struct tm));
47 memset(&off, 0,
sizeof(
struct tm));
50 &gmt.tm_year, &gmt.tm_mon, &gmt.tm_mday,
51 &gmt.tm_hour, &gmt.tm_min, &sec,
52 &off.tm_hour, &off.tm_min) == 8) {
53 gmt.tm_sec = (int) sec;
56 fix = off.tm_hour * 3600 + off.tm_min * 60;
60 &gmt.tm_year, &gmt.tm_mon, &gmt.tm_mday,
61 &gmt.tm_hour, &gmt.tm_min, &sec,
62 &off.tm_hour, &off.tm_min) == 8) {
63 gmt.tm_sec = (int) sec;
66 fix = - off.tm_hour * 3600 - off.tm_min * 60;
70 &gmt.tm_year, &gmt.tm_mon, &gmt.tm_mday,
71 &gmt.tm_hour, &gmt.tm_min, &sec) == 6) {
72 gmt.tm_sec = (int) sec;
79 &gmt.tm_hour, &gmt.tm_min, &sec,
80 &off.tm_hour, &off.tm_min) == 5) {
81 gmt.tm_sec = (int) sec;
82 fix = off.tm_hour * 3600 + off.tm_min * 60;
86 &gmt.tm_hour, &gmt.tm_min, &sec,
87 &off.tm_hour, &off.tm_min) == 5) {
88 gmt.tm_sec = (int) sec;
89 fix = - off.tm_hour * 3600 - off.tm_min * 60;
93 &gmt.tm_hour, &gmt.tm_min, &sec) == 3) {
94 gmt.tm_sec = (int) sec;
95 fix = - off.tm_hour * 3600 - off.tm_min * 60;
99 &gmt.tm_year, &gmt.tm_mon, &gmt.tm_mday,
100 &gmt.tm_hour, &gmt.tm_min, &sec) == 6) {
101 gmt.tm_sec = (int) sec;
109 gettimeofday(&tv, &tz);
111 return mktime(&gmt) + fix - (tz.tz_minuteswest * 60);
118 assert((
int) (date != NULL));
119 assert((
int) datelen);
125 snprintf(date, datelen,
"%04d-%02d-%02d", gmt->tm_year + 1900, gmt->tm_mon + 1, gmt->tm_mday);
129 snprintf(date, datelen,
"%02d:%02d:%02dZ", gmt->tm_hour, gmt->tm_min, gmt->tm_sec);
133 snprintf(date, datelen,
"%04d-%02d-%02dT%02d:%02d:%02dZ", gmt->tm_year + 1900, gmt->tm_mon + 1, gmt->tm_mday, gmt->tm_hour, gmt->tm_min, gmt->tm_sec);
137 snprintf(date, datelen,
"%04d%02d%02dT%02d:%02d:%02d", gmt->tm_year + 1900, gmt->tm_mon + 1, gmt->tm_mday, gmt->tm_hour, gmt->tm_min, gmt->tm_sec);
void datetime_out(time_t t, datetime_t type, char *date, int datelen)
time_t datetime_in(char *date)