} /* }}} 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 : */
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 : */