2019年7月8日 星期一

【C程式設計】Unix時間計算

這個程式可以把年月日時分秒轉換為Unix Time(又稱POSIX Time,從1970年1月1日開始計算的秒數,不含閏秒)。
#include <stdio.h>
static long dpm[]
  = {0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
int main()
{
  unsigned long Y, M, D, h, m, s;
  puts("YYYY MM DD hh:mm:ss");
  scanf("%lu %lu %lu %lu:%lu:%lu", &Y, &M, &D, &h, &m, &s);
  if (M > 12 || Y < 1970 || h > 23 || m > 59 || s > 59) {
    return 1;
  }
  --D;
  D += dpm[M];
  if ((Y & 3) == 0 && ((Y % 100) != 0 || (Y % 400) == 0)) {
    if (M > 2) {
      D += 1;
    }
  }
  D += (Y - 1970) * 365;
  if (Y > 1972) {
    D += (Y - 1972) >> 2;
    D += (((Y - 1972) & 3) && 1);
    if (Y > 2000) {
      D -= (Y - 2000) / 100;
      D -= ((Y - 2000) % 100) && 1;

      D += (Y - 2000) / 400;
      D += ((Y - 2000) % 400) && 1;
    }
  }
  printf("%ld\n", D * 86400 + h * 3600 + m * 60 + s);
  return 0;
}