Date formatting for Single Unix Specification(R) versions of “date”


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;
}

Leave a Reply

%d bloggers like this: