10
10
_units = ['days' ,'hours' ,'minutes' ,'seconds' ,'day' ,'hour' ,'minute' ,'second' ]
11
11
_calendars = ['standard' ,'gregorian' ,'proleptic_gregorian' ,'noleap' ,'julian' ,'all_leap' ,'365_day' ,'366_day' ,'360_day' ]
12
12
13
- __version__ = '1.1 '
13
+ __version__ = '1.2 '
14
14
15
15
# Adapted from http://delete.me.uk/2005/03/iso8601.html
16
16
ISO8601_REGEX = re .compile (r"(?P<year>[0-9]{1,4})(-(?P<month>[0-9]{1,2})(-(?P<day>[0-9]{1,2})"
19
19
)
20
20
TIMEZONE_REGEX = re .compile ("(?P<prefix>[+-])(?P<hours>[0-9]{1,2}):(?P<minutes>[0-9]{1,2})" )
21
21
22
- class datetime :
22
+ class datetime ( object ) :
23
23
"""
24
24
Phony datetime object which mimics the python datetime object,
25
25
but allows for dates that don't exist in the proleptic gregorian calendar.
@@ -35,24 +35,47 @@ class datetime:
35
35
"""
36
36
def __init__ (self ,year ,month ,day ,hour = 0 ,minute = 0 ,second = 0 ,dayofwk = - 1 ,dayofyr = 1 ):
37
37
"""dayofyr set to 1 by default - otherwise time.strftime will complain"""
38
- self .year = year
39
- self .month = month
40
- self .day = day
41
- self .hour = hour
42
- self .minute = minute
43
- self .dayofwk = dayofwk
44
- self .dayofyr = dayofyr
45
- self .second = second
46
- self .format = '%Y-%m-%d %H:%M:%S'
38
+ self ._year = year
39
+ self ._month = month
40
+ self ._day = day
41
+ self ._hour = hour
42
+ self ._minute = minute
43
+ self ._dayofwk = dayofwk
44
+ self ._dayofyr = dayofyr
45
+ self ._second = second
46
+ self ._format = '%Y-%m-%d %H:%M:%S'
47
+
48
+ year = property (lambda self : self ._year )
49
+ month = property (lambda self : self ._month )
50
+ day = property (lambda self : self ._day )
51
+ hour = property (lambda self : self ._hour )
52
+ minute = property (lambda self : self ._minute )
53
+ dayofwk = property (lambda self : self ._dayofwk )
54
+ dayofyr = property (lambda self : self ._dayofyr )
55
+ second = property (lambda self : self ._second )
56
+ format = property (lambda self : self ._format )
57
+
47
58
def strftime (self ,format = None ):
48
59
if format is None :
49
60
format = self .format
50
61
return _strftime (self ,format )
62
+
51
63
def timetuple (self ):
52
64
return (self .year ,self .month ,self .day ,self .hour ,self .minute ,self .second ,self .dayofwk ,self .dayofyr ,- 1 )
65
+
66
+ def _to_real_datetime (self ):
67
+ return real_datetime (self ._year , self ._month , self ._day , self ._hour , self ._minute , self ._second )
68
+
53
69
def __repr__ (self ):
54
70
return self .strftime (self .format )
55
71
72
+ def __hash__ (self ):
73
+ try :
74
+ d = self ._to_real_datetime ()
75
+ except ValueError :
76
+ return hash (tuple (sorted (self .__dict__ .items ())))
77
+ return hash (d )
78
+
56
79
def _compare (self , comparison_op , other ):
57
80
if hasattr (other , 'strftime' ):
58
81
return comparison_op (self .strftime ('%Y-%m-%d %H:%M:%S' ),
0 commit comments