Skip to content

Instantly share code, notes, and snippets.

@kuro68k
Created March 28, 2018 10:22
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kuro68k/f3bf26642a9bc854e2e18677f5c7e39e to your computer and use it in GitHub Desktop.
Save kuro68k/f3bf26642a9bc854e2e18677f5c7e39e to your computer and use it in GitHub Desktop.
Format __DATE__ and __TIME__ to ISO 8601
#include <stdio.h>
#define MONTH0 ( __DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? '0' : '0') \
: __DATE__ [2] == 'b' ? 2 \
: __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? '0' : '0') \
: __DATE__ [2] == 'y' ? '0' \
: __DATE__ [2] == 'l' ? '0' \
: __DATE__ [2] == 'g' ? '0' \
: __DATE__ [2] == 'p' ? '0' \
: __DATE__ [2] == 't' ? '1' \
: __DATE__ [2] == 'v' ? '1' \
: '1')
#define MONTH1 ( __DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? '1' : '6') \
: __DATE__ [2] == 'b' ? 2 \
: __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? '3' : '4') \
: __DATE__ [2] == 'y' ? '5' \
: __DATE__ [2] == 'l' ? '7' \
: __DATE__ [2] == 'g' ? '8' \
: __DATE__ [2] == 'p' ? '9' \
: __DATE__ [2] == 't' ? '0' \
: __DATE__ [2] == 'v' ? '1' \
: '2')
// ISO 8601 YYYY-MM-DDThh:mm:ss
#define ISO_8601_DATE (const char[]){ __DATE__[7], __DATE__[8], __DATE__[9], __DATE__[10], \
'-', MONTH0, MONTH1, \
'-', __DATE__[4], __DATE__[5], \
'T', __TIME__[0], __TIME__[1], \
':', __TIME__[3], __TIME__[4], \
':', __TIME__[6], __TIME__[7], \
'\0' }
void main(void)
{
printf("__DATE__: %s\n", __DATE__);
printf("__TIME__: %s\n", __TIME__);
printf("__TIMESTAMP__: %s\n", __TIMESTAMP__);
printf("ISO_8601_DATE: %s\n", ISO_8601_DATE);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment