datetime_un.c
changeset 0 068428edee47
equal deleted inserted replaced
-1:000000000000 0:068428edee47
       
     1 #include "datetime.h"
       
     2 
       
     3 /* roughly 100x faster than mktime() */
       
     4 datetime_sec datetime_untai(dt)
       
     5 struct datetime *dt;
       
     6 {
       
     7   int year;
       
     8   int day;
       
     9   int mon;
       
    10  
       
    11   year = dt->year + 1900;
       
    12  
       
    13   mon = dt->mon;
       
    14   if (mon >= 2) { mon -= 2; }
       
    15   else { mon += 10; --year; }
       
    16  
       
    17   day = (dt->mday - 1) * 10 + 5 + 306 * mon;
       
    18   day /= 10;
       
    19  
       
    20   if (day == 365) { year -= 3; day = 1460; }
       
    21   else { day += 365 * (year % 4); }
       
    22   year /= 4;
       
    23  
       
    24   day += 1461 * (year % 25);
       
    25   year /= 25;
       
    26  
       
    27   if (day == 36524) { year -= 3; day = 146096; }
       
    28   else { day += 36524 * (year % 4); }
       
    29   year /= 4;
       
    30  
       
    31   day += 146097 * (year - 5);
       
    32   day += 11017;
       
    33  
       
    34   return ((day * 24 + dt->hour) * 60 + dt->min) * 60 + dt->sec;
       
    35 }