01/01/13 01:54
>>39
日付関係の便利なライブラリがある言語を使えばいいと思う
(RubyとかJavaとか)が、即席でCでジェネレータを書いてみた。
ただし仕様は限りなく手抜き。
日付フォーマット変えたいときはPRINTFMTをstrftime(3)で
指定可能な適当なものに変更してくれ。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define PRINTFMT "%Y%m%d"
int gendate(const char *from, const char *to)
{
const char *fmt = "%d%c%d%c%d";
int i, y, m, d;
char junk[2];
struct tm local;
time_t secs[2];
char buff[24];
const char *p;
memset(&local, 0, sizeof(local));
for (i = 0; i < 2; ++i) {
p = i ? to : from;
if (sscanf(p, fmt, &y, &junk[0], &m, &junk[1], &d) != 5) {
fprintf(stderr, "Invalid date format: %s\n", p);
return 2;
}
local.tm_year = y - 1900; /* XXX */
local.tm_mon = m - 1;
local.tm_mday = d;
secs[i] = mktime(&local);
if (secs[i] == -1) {
fprintf(stderr, "Can't handle date: %s\n", p);
return 2;
}
}
while (difftime(secs[0], secs[1]) <= 0) {
strftime(buff, sizeof buff, PRINTFMT, localtime(&secs[0]));
puts(buff);
secs[0] += 60 * 60 * 24;
}
return 0;
}
int main(int argc, char **argv)
{
if (argc < 3) {
fprintf(stderr, "usage: %s from to\n", argv[0]);
return 1;
}
return gendate(argv[1], argv[2]);
}