Path: csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!newsfeed.xs4all.nl!newsfeed4.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.027 X-Spam-Evidence: '*H*': 0.95; '*S*': 0.00; 'say,': 0.05; 'smallest': 0.07; 'ambiguity': 0.09; 'cc:addr:python-list': 0.11; 'from:addr:pobox.com': 0.16; 'from:addr:skip': 0.16; 'roy': 0.16; 'seconds,': 0.16; 'stuff.': 0.16; 'subclass': 0.16; 'sender:addr:gmail.com': 0.17; 'wrote:': 0.18; 'wed,': 0.18; 'seems': 0.21; 'appears': 0.22; 'cc:addr:python.org': 0.22; 'days,': 0.24; 'specify': 0.24; 'cc:2**0': 0.24; 'supported': 0.26; 'header:In-Reply-To:1': 0.27; 'am,': 0.29; 'message- id:@mail.gmail.com': 0.30; 'context.': 0.31; 'decimal': 0.31; 'probably': 0.32; 'guess': 0.33; 'comment': 0.34; '"the': 0.34; 'subject: (': 0.35; "can't": 0.35; 'something': 0.35; 'objects': 0.35; 'received:google.com': 0.35; 'there': 0.35; 'really': 0.36; 'half': 0.37; 'seconds': 0.37; 'wrong': 0.37; 'so,': 0.37; 'whatever': 0.38; 'that,': 0.38; 'realize': 0.39; 'duration': 0.60; 'units': 0.60; 'year.': 0.61; 'first': 0.61; 'back': 0.62; 'map': 0.64; 'more': 0.64; 'mar': 0.68; '26,': 0.68; 'square': 0.74; 'actually,': 0.84 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=SnrnC6lk1Rzsd563qZZ7jJ55SyOXnVEazSLqr397/E4=; b=i1L20JCgI2HQJQydFr076yzVeqUHNwuJn3CJtxJFNaaxemMyU4B/RZxj7Lwhil81sO ZKSCswHglAjk4oO2hMERd8SemL+Mu0IxuTXYRpLpgJ89p5pPcY7jCsyJFiNiITpmbV48 EyR1GUkMOkNu1mLCHaagUumRDsi5ZNvgLA77vs1jOVRkG/6mv/LzJMyGTPcaN/fjQste JMrut8AbyC5QehnrgEt7TrlcAsTZOwtkg6Ki72IgS3ak9HXue22ZLbwxiRMES/s7V1sG V/pUtGcbyMsszk6RiYLLx5ZP2/nS9ffS3JxPasKxXuxbNZO/eeZt06/O4bBOuUER0o93 /wkQ== MIME-Version: 1.0 X-Received: by 10.50.79.194 with SMTP id l2mr25237053igx.8.1395851677493; Wed, 26 Mar 2014 09:34:37 -0700 (PDT) Sender: skip.montanaro@gmail.com In-Reply-To: <87a9cdx87t.fsf@elektro.pacujo.net> References: <1102ec6b-6205-40f4-bb7c-d40f9d13115b@googlegroups.com> <87a9cdx87t.fsf@elektro.pacujo.net> Date: Wed, 26 Mar 2014 11:34:37 -0500 X-Google-Sender-Auth: zl4LlpYhZLfa11bBmHEH-SqvZx8 Subject: Re: YADTR (Yet Another DateTime Rant) From: Skip Montanaro To: Marko Rauhamaa Content-Type: text/plain; charset=UTF-8 Cc: Python X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 27 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1395851680 news.xs4all.nl 2834 [2001:888:2000:d::a6]:33527 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:69136 On Wed, Mar 26, 2014 at 10:58 AM, Marko Rauhamaa wrote: > Fractions of seconds are supported -- the other fields can't be > fractional. Actually, it appears that whatever the last value you give can be fractionated. From the Wikipedia page you referenced: "The smallest value used may also have a decimal fraction, as in "P0.5Y" to indicate half a year." > As you say, P1M really means one month and P1Y means one year. The > ambiguity is intentional; if you mean to pay your employees monthly, > the interval is one month. True. Your comment about monthly intervals makes me realize that you probably can't map timedelta objects onto this ISO8601 duration stuff. It seems like if you want to specify "pay my employees on the first of every month", then timedelta objects are the wrong thing. You want a recurrence relation, which is a more complex beast. For that, you want something like dateutil.rrule. There is a good reason that the internal units of timedelta objects are days, seconds, and microseconds. They are well-defined outside of a calendar context. So, I guess Roy is back to square one. He can always roll his own timedelta subclass and give it a __str__ implementation... S