aboutsummaryrefslogtreecommitdiffstats
path: root/src/tag
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2015-01-22 19:10:15 +0100
committerMax Kellermann <max@duempel.org>2015-01-22 19:10:15 +0100
commit72e44d596f16127f208221d8b455588bd03134e4 (patch)
treefaeeb55702e39b0d2c577a3f277447068176e388 /src/tag
parent8f2ca8f0853b3aea7897a464bf60efdf75bc91c9 (diff)
downloadmpd-72e44d596f16127f208221d8b455588bd03134e4.tar.gz
mpd-72e44d596f16127f208221d8b455588bd03134e4.tar.xz
mpd-72e44d596f16127f208221d8b455588bd03134e4.zip
tag/Format: add %iso8601%
Diffstat (limited to 'src/tag')
-rw-r--r--src/tag/Format.cxx27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/tag/Format.cxx b/src/tag/Format.cxx
index 3fdcc7db6..de4db57ef 100644
--- a/src/tag/Format.cxx
+++ b/src/tag/Format.cxx
@@ -26,6 +26,7 @@
#include <algorithm>
#include <string.h>
+#include <time.h>
struct FormatTagContext {
const Tag &tag;
@@ -82,6 +83,32 @@ TagGetter(const void *object, const char *name)
{
const auto &_ctx = *(const FormatTagContext *)object;
auto &ctx = const_cast<FormatTagContext &>(_ctx);
+
+ if (strcmp(name, "iso8601") == 0) {
+ time_t t = time(nullptr);
+#ifdef WIN32
+ const struct tm *tm2 = gmtime(&t);
+#else
+ struct tm tm;
+ const struct tm *tm2 = gmtime_r(&t, &tm);
+#endif
+ if (tm2 == nullptr)
+ return "";
+
+ strftime(ctx.buffer, sizeof(ctx.buffer),
+#ifdef WIN32
+ /* kludge: use underscore instead of colon on
+ Windows because colons are not allowed in
+ file names, and this library is mostly
+ used to generate file names */
+ "%Y-%m-%dT%H_%M_%SZ",
+#else
+ "%FT%TZ",
+#endif
+ tm2);
+ return ctx.buffer;
+ }
+
const Tag &tag = ctx.tag;
TagType tag_type = tag_name_parse_i(name);