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

Loris Bennett loris.bennett at fu-berlin.de
Wed Apr 20 02:35:24 EDT 2022


Dennis Lee Bieber <wlfraed at ix.netcom.com> writes:

> 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.

That is interesting.  However, I am not claiming that the definition of
a year as 365 24-hour days is in any way correct, merely that it is a
possible definition and one that is potentially handy if one wants to
represent large numbers of seconds in a more readable way.

> 	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>

And of course I should have been asking why timedelta doesn't provide an
easy way to format the period as a number of fortnights :-)

> 	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. 

That indeed seems to be the case and the lack of trivial formatting
options for monotonic durations is what surprises me. 

> 	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.
> """
-- 
This signature is currently under construction.


More information about the Python-list mailing list