Why does datetime.timedelta only have the attributes 'days' and 'seconds'?

Dennis Lee Bieber wlfraed at ix.netcom.com
Tue Apr 19 14:23:11 EDT 2022


On Tue, 19 Apr 2022 15:51:09 +0200, "Loris Bennett"
<loris.bennett at fu-berlin.de> declaimed the following:

>If I am merely trying to represent part a very large number of seconds
>as a number of years, 365 days per year does not seem that controversial

	The Explanatory Supplement to the Astronomical Almanac (table 15.3)
defines the /day/ as 24hrs->1440mins->86400secs	BUT		defines the Julian
/year/ as 365.25 days.

	It goes on to also give (for my copy -- length of year at 1990):
Tropical (equinox to equinox)		365.2421897 days *
Sidereal (fixed star to fixed star)	365.25636 days
Anomalistic (perihelion to perihelion)	365.25964 days
Eclipse (moon's node to moon's node)	346.26005
Gaussian (Kepler's law /a/=1)		365.25690
Julian								365.25

	Length of the month (I interpret this as lunar month):
Synodic (new moon to new moon)	29.53059 days
Tropical (as with year)				27.32158
Sidereal (as with year)				27.32166
Anomalistic (perigee to perigee)	27.55455
Draconic (node to node)				27.21222

*	I /think/ this is the year used for leap-day calculations, and why some
leap centuries are skipped as it is really less than a quarter day per
year, so eventually one gets to over-correcting by a day.

	Of course, this book also has a footnote giving the speed of light as
1.80261750E12 Furlongs/Fortnight <G>


	However, as soon you incorporate units that are not SI seconds you have
to differentiate between pure duration (based on SI seconds) and civil time
(which may jump when leap seconds are added/subtracted, time zones are
crossed, or daylight savings time goes into [or out of] effect).

	For the most part, Python's datetime module seems to account for civil
time concepts, not monotonic durations. 

	The Ada standard separates "duration" (as a measure of elapsed time, in
fixed point seconds) from "time" (a private type in Ada.Calendar -- which
does NOT define hours/minutes... It has Year 1901..2399, Month 1..12, Day
1..31, Day_duration 0.0..86400.0). There are functions to create a Time
from components, split a Time into components, compare two times, add a
Duration to a Time, subtract a Duration from a Time, and subtract a Time
from a Time (getting a Duration). Oh, and a function to get Time from
system clock. Per the standard, the Time Zone used is implementation
defined (so one needs to read the implementation manual to find out what a
Time really notates). Of note:
"""
26.a/1
To be honest: {8652/0106} {AI95-00160-01} By "proper date" above we mean
that the given year has a month with the given day. For example, February
29th is a proper date only for a leap year. We do not mean to include the
Seconds in this notion; in particular, we do not mean to require
implementations to check for the “missing hour” that occurs when Daylight
Savings Time starts in the spring. 
"""
"""
43
   type Duration is delta implementation-defined range
implementation-defined;
"""

	GNAT provides an extension package GNAT.Calendar that adds
hour/minute/day-of-week and some other utilities... BUT
"""
 procedure Split_At_Locale
     (Date       : Ada.Calendar.Time;
      Year       : out Ada.Calendar.Year_Number;
      Month      : out Ada.Calendar.Month_Number;
      Day        : out Ada.Calendar.Day_Number;
      Hour       : out Hour_Number;
      Minute     : out Minute_Number;
      Second     : out Second_Number;
      Sub_Second : out Second_Duration);
 --  Split a standard Ada.Calendar.Time value in date data (Year, Month,
Day)
   --  and Time data (Hour, Minute, Second, Sub_Second). This version of
Split
   --  utilizes the time zone and DST bias of the locale (equivalent to
Clock).
   --  Due to this simplified behavior, the implementation does not require
   --  expensive system calls on targets such as Windows.
   --  WARNING: Split_At_Locale is no longer aware of historic events and
may
   --  produce inaccurate results over DST changes which occurred in the
past.
"""




-- 
	Wulfraed                 Dennis Lee Bieber         AF6VN
	wlfraed at ix.netcom.com    http://wlfraed.microdiversity.freeddns.org/


More information about the Python-list mailing list