The date command is wonderful for formatting dates, as such
date --date="2010-01-01" +%Y%j
But what happens when you’re on a system whose date command only supports the -u [UTC] and + [for formatting] options?
Below is a quick hack in straight C that provides the ability to format a date that you provide. This is ideal if your unix install of perl is very basic or non-existent, but you still have access to the C compiler.
Compiling the target would go as follows:
gcc strptime.c -o strptime
Running the output would be as follows:
./strptime "2010-01-01" "%Y%j"
strptime.c source code–Please note: there is limited error checking for the wrong arguments, etc., and overlapping a built-in name such as strptime() isn’t the best of practices…
#include
#include
int main(int argc, char *argv[]) {
struct tm tm;
time_t t;
char string[255];
if(strptime(argv[1], "%Y-%m-%d", &tm) == NULL) {
if (strptime(argv[1], "%m/%d/%Y", &tm) == NULL ) {
fprintf(stderr, "format errorn");
return 1;
}
}
strftime(string, sizeof(string) - 1, argv[2], &tm);
printf("%s",string);
return 0;
}