This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: datetime.timedelta is inconvenient to use...
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.2, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: bquinlan, georg.brandl, giampaolo.rodola, mark.dickinson, mw44118, pitrou
Priority: normal Keywords: patch

Created on 2009-04-18 18:37 by bquinlan, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
totalseconds.diff bquinlan, 2009-04-18 18:38 Adds a datetime.total_seconds attribute
totalseconds2.diff bquinlan, 2009-04-19 12:06 implement total_seconds as a method
Messages (16)
msg86132 - (view) Author: Brian Quinlan (bquinlan) * (Python committer) Date: 2009-04-18 18:37
...in seconds-based library functions (e.g. time.sleep) and calculations
(e.g. distance = velocity * ?).
msg86133 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2009-04-18 19:22
Please include a proper description of your problem, and a patch
description when you post a patch.
msg86135 - (view) Author: Brian Quinlan (bquinlan) * (Python committer) Date: 2009-04-18 19:36
I did add a patch description: "Adds a datetime.total_seconds attribute"
- is that unclear?

The idea is that you should be able to extract the total number of
seconds in the duration i.e.
>>> dt = datetime.timedelta(seconds=1234567.89)
>>> dt.total_seconds
1234567.89
msg86136 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2009-04-18 20:02
I saw the patch description as well, but usually you put that
description, and perhaps a motivation as well, in the comment. That way
it's easier for people to directly see what an issue is about.
msg86138 - (view) Author: Brian Quinlan (bquinlan) * (Python committer) Date: 2009-04-18 20:20
OK, a bit on motivation:
1. datetime.timedelta instances are a convenient way of representing
   durations
2. datetime.timedelta instances cannot be conveniently used in many
   calculations e.g. calculating distance based on velocity and time
3. datetime.timedelta instances cannot be conveniently used in many
   library functions e.g. time.sleep(), urllib2.urlopen(timeout=)

I propose to fix that by adding a timedelta.total_seconds attribute that
equals:
timedelta.days * 3600 * 24 + timedelta.seconds + timedelta.microseconds
/ 100000.0
msg86147 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-04-18 23:49
The addition looks quite legitimate to me.
The only thing is that it may be better as a method (total_seconds())
rather than an attribute, given the other APIs in the datetime module.
Also, the patch lacks some unit tests.
msg86148 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-04-18 23:50
Sorry for the last comment about unit tests, they are here actually :-)
msg86167 - (view) Author: Brian Quinlan (bquinlan) * (Python committer) Date: 2009-04-19 12:07
Attached is a patch that implements .total_seconds as an instance method
msg87768 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-05-14 21:38
Given the timing, I fear this will have to wait for 3.2.
msg95726 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-11-25 23:04
The patch is committed in r76529 (trunk) and r76530 (py3k). Thank you!
msg95732 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2009-11-26 08:13
A late note: this would be redundant if the oft-requested division of 
timedeltas were implemented:  t.total_seconds could then be spelt

t/timedelta(seconds=1)

with the advantage that there would then be a natural way to spell 
t.total_days or t.total_hours as well.
msg95733 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2009-11-26 08:14
That should be t.total_seconds(), of course.
msg95740 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-11-26 12:17
> A late note: this would be redundant if the oft-requested division of 
> timedeltas were implemented:  t.total_seconds could then be spelt
> 
> t/timedelta(seconds=1)

It would be less obvious, though.
msg145928 - (view) Author: Giampaolo Rodola' (giampaolo.rodola) * (Python committer) Date: 2011-10-19 18:15
Sorry for commenting on a closed issue but I just bumped into a problem requiring a total_minute() method I ended up implementing by doing some raw math by hand.
Would it be a reasonable addition?
If so I'll open a separate issue.
msg146115 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2011-10-21 19:28
What about

def total_minutes(td):
    return td / datetime.timedelta(minutes=1)

?
msg146131 - (view) Author: Brian Quinlan (bquinlan) * (Python committer) Date: 2011-10-21 20:34
You'll probably get more traction if you file a new bug.
History
Date User Action Args
2022-04-11 14:56:47adminsetgithub: 50038
2011-10-21 20:34:13bquinlansetmessages: + msg146131
2011-10-21 19:28:00mark.dickinsonsetmessages: + msg146115
2011-10-19 18:15:31giampaolo.rodolasetnosy: + giampaolo.rodola
messages: + msg145928
2009-11-26 12:17:24pitrousetmessages: + msg95740
2009-11-26 08:14:15mark.dickinsonsetmessages: + msg95733
2009-11-26 08:13:12mark.dickinsonsetnosy: + mark.dickinson
messages: + msg95732
2009-11-25 23:04:49pitrousetstatus: open -> closed
resolution: fixed
messages: + msg95726

stage: patch review -> resolved
2009-05-14 21:38:17pitrousetmessages: + msg87768
versions: + Python 3.2, - Python 3.1
2009-05-14 21:36:34pitrousetnosy: + mw44118
2009-05-14 21:36:29pitroulinkissue6020 superseder
2009-04-19 12:07:17bquinlansetmessages: + msg86167
2009-04-19 12:06:07bquinlansetfiles: + totalseconds2.diff
2009-04-18 23:50:45pitrousetmessages: + msg86148
2009-04-18 23:50:02pitrousetpriority: normal
type: enhancement
stage: patch review
2009-04-18 23:49:48pitrousetnosy: + pitrou

messages: + msg86147
versions: + Python 2.7, - Python 3.0
2009-04-18 20:20:25bquinlansetmessages: + msg86138
2009-04-18 20:02:59georg.brandlsetmessages: + msg86136
2009-04-18 19:36:41bquinlansetmessages: + msg86135
2009-04-18 19:22:13georg.brandlsetnosy: + georg.brandl
messages: + msg86133
2009-04-18 18:38:43bquinlansetfiles: + totalseconds.diff
keywords: + patch
2009-04-18 18:37:39bquinlancreate