日付のフォーマット

日付文字列のフォーマット処理みたいなことは仕事柄よくやるんだけど、
そういやCでそういうのをやったことがないことに気付いてちょっとやってみた。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>

#define MAX_LENGTH 50

int main(int argc, char *argv[]){
  int i;
  time_t rawtime[2];
  struct tm *timeinfo[2];
  char buf[2][MAX_LENGTH + 1];
  char time_format[] = "%Y-%m-%d %H:%M:%S %z";
  struct stat st[2];

  if (stat(argv[1], &st[0]) == -1) {
    exit(-1);
  }
  if (stat(argv[2], &st[1]) == -1) {
    exit(-1);
  }

  for (i=0;i<2;++i) {
    rawtime[i] = st[i].st_mtime;
    timeinfo[i] = localtime(&rawtime[i]);
    strftime(buf[i], MAX_LENGTH, time_format, timeinfo[i]);
    printf("%s:%s\n", argv[i+1], buf[i]);
  }
  return 0;
}

実行結果

narazuya@bokkko% ./a.out a.c b.c
a.c:2008-08-09 16:17:35 +0900
b.c:2008-08-19 23:02:50 +0900
narazuya@bokkko%  

このへんはやっぱり頭にPの付く言語でやった方が楽だなあと感じる。