|
15 | 15 | # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
16 | 16 | # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
17 | 17 | # |
18 | | -# $Id: date.py,v 1.65 2004-04-06 22:43:59 richard Exp $ |
| 18 | +# $Id: date.py,v 1.66 2004-04-13 05:28:00 richard Exp $ |
19 | 19 |
|
20 | 20 | """Date, time and time interval handling. |
21 | 21 | """ |
22 | 22 | __docformat__ = 'restructuredtext' |
23 | 23 |
|
24 | 24 | import time, re, calendar, types |
| 25 | +from types import * |
25 | 26 | from i18n import _ |
26 | 27 |
|
27 | 28 | def _add_granularity(src, order, value = 1): |
@@ -433,7 +434,9 @@ class Interval: |
433 | 434 | ''' |
434 | 435 | def __init__(self, spec, sign=1, allowdate=1, add_granularity=0): |
435 | 436 | """Construct an interval given a specification.""" |
436 | | - if type(spec) == type(''): |
| 437 | + if type(spec) in (IntType, FloatType, LongType): |
| 438 | + self.from_seconds(spec) |
| 439 | + elif type(spec) in (StringType, UnicodeType): |
437 | 440 | self.set(spec, allowdate=allowdate, add_granularity=add_granularity) |
438 | 441 | else: |
439 | 442 | if len(spec) == 7: |
@@ -533,6 +536,8 @@ def __str__(self): |
533 | 536 | l.append('%d:%02d'%(self.hour, self.minute)) |
534 | 537 | if l: |
535 | 538 | l.insert(0, {1:'+', -1:'-'}[self.sign]) |
| 539 | + else: |
| 540 | + l.append('00:00') |
536 | 541 | return ' '.join(l) |
537 | 542 |
|
538 | 543 | def __add__(self, other): |
@@ -680,6 +685,42 @@ def serialise(self): |
680 | 685 | return '%s%04d%02d%02d%02d%02d%02d'%(sign, self.year, self.month, |
681 | 686 | self.day, self.hour, self.minute, self.second) |
682 | 687 |
|
| 688 | + def as_seconds(self): |
| 689 | + '''Calculate the Interval as a number of seconds. |
| 690 | + |
| 691 | + Months are counted as 30 days, years as 365 days. Returns a Long |
| 692 | + int. |
| 693 | + ''' |
| 694 | + n = self.year * 365L |
| 695 | + n = n + self.month * 30 |
| 696 | + n = n + self.day |
| 697 | + n = n * 24 |
| 698 | + n = n + self.hour |
| 699 | + n = n * 60 |
| 700 | + n = n + self.minute |
| 701 | + n = n * 60 |
| 702 | + n = n + self.second |
| 703 | + return n * self.sign |
| 704 | + |
| 705 | + def from_seconds(self, val): |
| 706 | + '''Figure my second, minute, hour and day values using a seconds |
| 707 | + value. |
| 708 | + ''' |
| 709 | + if val < 0: |
| 710 | + self.sign = -1 |
| 711 | + val = -val |
| 712 | + else: |
| 713 | + self.sign = 1 |
| 714 | + self.second = val % 60 |
| 715 | + val = val / 60 |
| 716 | + self.minute = val % 60 |
| 717 | + val = val / 60 |
| 718 | + self.hour = val % 24 |
| 719 | + val = val / 24 |
| 720 | + self.day = val |
| 721 | + self.month = self.year = 0 |
| 722 | + |
| 723 | + |
683 | 724 | def fixTimeOverflow(time): |
684 | 725 | """ Handle the overflow in the time portion (H, M, S) of "time": |
685 | 726 | (sign, y,m,d,H,M,S) |
|
0 commit comments