summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 893f2b7)
raw | patch | inline | side by side (parent: 893f2b7)
author | Sebastian Harl <sh@tokkee.org> | |
Sat, 18 Aug 2012 16:11:39 +0000 (18:11 +0200) | ||
committer | Sebastian Harl <sh@tokkee.org> | |
Sat, 18 Aug 2012 16:11:39 +0000 (18:11 +0200) |
This function formats a cdtime_t value in ISO 8601 format (and ensures that
the string is null terminated).
the string is null terminated).
src/utils_time.c | patch | blob | history | |
src/utils_time.h | patch | blob | history |
diff --git a/src/utils_time.c b/src/utils_time.c
index aac6135e28f8bf7d1be5966d5316a64c28200e93..f30dc0fa155055786669cc2decd69fb162763054 100644 (file)
--- a/src/utils_time.c
+++ b/src/utils_time.c
} /* }}} cdtime_t cdtime */
#endif
+size_t cdtime_to_iso8601 (char *s, size_t max, cdtime_t t) /* {{{ */
+{
+ struct timespec t_spec;
+ struct tm t_tm;
+
+ size_t len;
+
+ CDTIME_T_TO_TIMESPEC (t, &t_spec);
+ NORMALIZE_TIMESPEC (t_spec);
+
+ if (localtime_r ((time_t *)&t_spec.tv_sec, &t_tm) == NULL) {
+ char errbuf[1024];
+ ERROR ("cdtime_to_iso8601: localtime_r failed: %s",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ return (0);
+ }
+
+ len = strftime (s, max, "%Y-%m-%dT%H:%M:%S", &t_tm);
+ if (len == 0)
+ return 0;
+
+ if (max - len > 2) {
+ int n = snprintf (s + len, max - len, ".%09i", (int)t_spec.tv_nsec);
+ len += (n < max - len) ? n : max - len;
+ }
+
+ s[max - 1] = '\0';
+ return len;
+} /* }}} size_t cdtime_to_iso8601 */
+
/* vim: set sw=2 sts=2 et fdm=marker : */
diff --git a/src/utils_time.h b/src/utils_time.h
index 0fd809ac5de49327044102a9eabd9b28820abdc9..0081957dc514d8fdb9ba513132c726b639503d07 100644 (file)
--- a/src/utils_time.h
+++ b/src/utils_time.h
cdtime_t cdtime (void);
+/* format a cdtime_t value in ISO 8601 format:
+ * returns the number of characters written to the string (not including the
+ * terminating null byte or 0 on error; the function ensures that the string
+ * is null terminated */
+size_t cdtime_to_iso8601 (char *s, size_t max, cdtime_t t);
+
#endif /* UTILS_TIME_H */
/* vim: set sw=2 sts=2 et : */