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 <time.h>
#include <stdio.h>
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);
    return 0;