Deprecated: Use eday package, which implements a simpler, datetime.datime <-> float (ED)
conversion.
Imagine decimal representation of days of UNIX seconds, call it "Epoch Days".
Then, imagine grouping the digits of such days representation as follows:
dYear
°dMonth
″dWeek
′day
TdHour
:dMinute
:dSecond
, such that:
- 1 dYear =
1000 days
, 1 dMonth =100 days
, 1 dWeek =10 days
, - 1 dHour =
0.1 days
, 1 dMinute =0.001 days
, 1 dSecond =0.00001 days
.
Yes, you just divide your UNIX seconds / 86400
and group digits!
For example, 2021-09-30T11:25:45Z
would be represented as 1633001147
UNIX seconds, therefore:
1633001147/86400 = 18900.476238425927 = 18°9″0′0T4:76:23.8425927
, meaning it is 18th
dYear, 9th
dMonth, 0th
dWeek, 0th
day, 4th
dHour, 76th
dMinute, 23.8425927th
dSecond.
pip install edtime
>>> from edtime import edtime
>>> from datetime import datetime
>>> t0 = edtime(datetime.utcnow()) # OR edtime.utcnow()
>>> t1 = edtime.datetime(2021, 12, 20, 4, 52, 47, 954297)
>>> str(t1)
'18°9″8′1T2:03:33.2804365'
>>> float(t1)
18981.203332804365
>>> t2 = edtime(18981.203332804365); t2
edtime.edtime(dyear=18, dmonth=9, dweek=8, dday=1, dhour=2, dminute=3, dsecond=33.2804365)
>>> t1 == t2
True
>>> t3 = edtime(16, 4, 5, 3, 4, 65, 40.5092593); t3 # 2015-01-18T11:10:11
edtime.edtime(dyear=16, dmonth=4, dweek=5, dday=3, dhour=4, dminute=65, dsecond=40.5092593)
>>> str(t1 + t2 + t3)
'54°4″1′5T8:72:07.070133'
>>> (t1 + t2 + t3).to_datetime().isoformat()
'2118-12-26T20:55:46.908595'
For astronomers:
ED = JD - 2440587.5
>>> from edtime import edtime
>>> d = edtime.datetime(2000, 1, 1, 12)
>>> d.to_jd()
>>> 2451545.0
>>> float(edtime.from_jd(2451545))
10957.5
- => 1
dSecond
is: - 0.864 standard SI seconds long.
- => 1
- => 1
dMinute
is: - 86.4 standard SI seconds long.
- => 1
- => 1
dHour
is: - 8640 standard SI seconds long.
- => 1
- => 1
dWeek
is: - 10 days long.
- => 1
- => 1
dMonth
is: - 100 days long.
- => 1
- => 1
dYear
is: - 1000 days long.
- => 1
- https://0oo.li/calendar/ - The Infinity Family website uses this calendar in practice, planning d-weekly (=10-day long) sprints, and using the last whole digit of the epoch day as the weekday, and the remaining digits as decimal time.