datetime_un.c
changeset 0 068428edee47
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datetime_un.c	Fri Oct 19 14:06:22 2007 +0200
@@ -0,0 +1,35 @@
+#include "datetime.h"
+
+/* roughly 100x faster than mktime() */
+datetime_sec datetime_untai(dt)
+struct datetime *dt;
+{
+  int year;
+  int day;
+  int mon;
+ 
+  year = dt->year + 1900;
+ 
+  mon = dt->mon;
+  if (mon >= 2) { mon -= 2; }
+  else { mon += 10; --year; }
+ 
+  day = (dt->mday - 1) * 10 + 5 + 306 * mon;
+  day /= 10;
+ 
+  if (day == 365) { year -= 3; day = 1460; }
+  else { day += 365 * (year % 4); }
+  year /= 4;
+ 
+  day += 1461 * (year % 25);
+  year /= 25;
+ 
+  if (day == 36524) { year -= 3; day = 146096; }
+  else { day += 36524 * (year % 4); }
+  year /= 4;
+ 
+  day += 146097 * (year - 5);
+  day += 11017;
+ 
+  return ((day * 24 + dt->hour) * 60 + dt->min) * 60 + dt->sec;
+}