Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'io_import_dxf/dxfgrabber/juliandate.py')
-rwxr-xr-xio_import_dxf/dxfgrabber/juliandate.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/io_import_dxf/dxfgrabber/juliandate.py b/io_import_dxf/dxfgrabber/juliandate.py
new file mode 100755
index 00000000..68c5c8e1
--- /dev/null
+++ b/io_import_dxf/dxfgrabber/juliandate.py
@@ -0,0 +1,73 @@
+# Purpose: julian date
+# Created: 21.03.2011
+# Copyright (C) 2011, Manfred Moitzi
+# License: MIT License
+from __future__ import unicode_literals
+__author__ = "mozman <mozman@gmx.at>"
+
+from math import floor
+from datetime import datetime
+
+
+def frac(number):
+ return number - floor(number)
+
+
+class JulianDate:
+ def __init__(self, date):
+ self.date = date
+ self.result = self.julian_date() + self.fractional_day()
+
+ def fractional_day(self):
+ seconds = self.date.hour * 3600. + self.date.minute * 60. + self.date.second
+ return seconds / 86400.
+
+ def julian_date(self):
+ y = self.date.year + (float(self.date.month) - 2.85) / 12.
+ A = floor(367. * y) - 1.75 * floor(y) + self.date.day
+ B = floor(A) - 0.75 * floor(y / 100.)
+ return floor(B) + 1721115.
+
+
+class CalendarDate:
+ def __init__(self, juliandate):
+ self.jdate = juliandate
+ year, month, day = self.get_date()
+ hour, minute, second = frac2time(self.jdate)
+ self.result = datetime(year, month, day, hour, minute, second)
+
+ def get_date(self):
+ Z = floor(self.jdate)
+
+ if Z < 2299161:
+ A = Z # julian calender
+ else:
+ g = floor((Z - 1867216.25) / 36524.25) # gregorian calendar
+ A = Z + 1. + g - floor(g / 4.)
+
+ B = A + 1524.
+ C = floor((B - 122.1) / 365.25)
+ D = floor(365.25 * C)
+ E = floor((B - D) / 30.6001)
+
+ day = B - D - floor(30.6001 * E)
+ month = E - 1 if E < 14 else E - 13
+ year = C - 4716 if month > 2 else C - 4715
+ return int(year), int(month), int(day)
+
+
+def frac2time(jdate):
+ seconds = int(frac(jdate) * 86400.)
+ hour = int(seconds / 3600)
+ seconds = seconds % 3600
+ minute = int(seconds / 60)
+ second = seconds % 60
+ return hour, minute, second
+
+
+def julian_date(date):
+ return JulianDate(date).result
+
+
+def calendar_date(juliandate):
+ return CalendarDate(juliandate).result \ No newline at end of file