6
6
import arrow
7
7
from datetime import datetime as pydatetime
8
8
from datetime import timedelta
9
+ from datetime import timezone as pydttz
9
10
from datemath import dm , datemath
10
11
from datemath .helpers import DateMathException as DateMathException
11
12
from dateutil import tz
@@ -15,6 +16,9 @@ class TestDM(unittest.TestCase):
15
16
16
17
17
18
def testParse (self ):
19
+ # Make sure our helpers return the correct objects
20
+ self .assertIsInstance (datemath ('now' ), pydatetime )
21
+ self .assertIsInstance (dm ('now' ), arrow .arrow .Arrow )
18
22
19
23
# Baisc dates
20
24
self .assertEqual (dm ('2016.01.02' ).format (iso8601 ), '2016-01-02T00:00:00+00:00' )
@@ -42,13 +46,16 @@ def testParse(self):
42
46
self .assertEqual (dm ('2016-01-01' , tz = 'US/Eastern' ), pydatetime (2016 , 1 , 1 , tzinfo = tz .gettz ('US/Eastern' )))
43
47
self .assertEqual (datemath ('2016-01-01T01:00:00' , tz = 'US/Central' ), pydatetime (2016 , 1 , 1 , 1 , 0 , 0 , tzinfo = tz .gettz ('US/Central' )))
44
48
self .assertEqual (datemath ('2016-01-01T02:00:00' , tz = 'US/Eastern' ), pydatetime (2016 , 1 , 1 , 2 , tzinfo = tz .gettz ('US/Eastern' )))
49
+
45
50
# TZ offset inside of date string
46
51
self .assertEqual (datemath ('2016-01-01T16:20:00.5+12:00' ), pydatetime (2016 , 1 , 1 , 16 , 20 , 0 , 500000 , tzinfo = tz .tzoffset (None , timedelta (hours = 12 ))))
47
52
self .assertEqual (datemath ('2016-01-01T16:20:00.5-05:00' ), pydatetime (2016 , 1 , 1 , 16 , 20 , 0 , 500000 , tzinfo = tz .tzoffset (None , timedelta (hours = - 5 ))))
48
53
self .assertEqual (datemath ('2016-01-01T16:20:00.5-00:00' ), pydatetime (2016 , 1 , 1 , 16 , 20 , 0 , 500000 , tzinfo = tz .tzoffset (None , timedelta (hours = 0 ))))
54
+
49
55
# TZ offset inside of date string with datemath
50
56
self .assertEqual (datemath ('2016-01-01T16:20:00.5+12:00||+1d' ), pydatetime (2016 , 1 , 2 , 16 , 20 , 0 , 500000 , tzinfo = tz .tzoffset (None , timedelta (hours = 12 ))))
51
57
self .assertEqual (datemath ('2016-01-01T16:20:00.6+12:00||+2d+1h' ), pydatetime (2016 , 1 , 3 , 17 , 20 , 0 , 600000 , tzinfo = tz .tzoffset (None , timedelta (hours = 12 ))))
58
+
52
59
# If a TZ offset is in a datetime string, and there is a tz param used, the TZ offset will take precedence for the returned timeobj
53
60
self .assertEqual (datemath ('2016-01-01T16:20:00.6+12:00||+2d+1h' , tz = 'US/Eastern' ), pydatetime (2016 , 1 , 3 , 17 , 20 , 0 , 600000 , tzinfo = tz .tzoffset (None , timedelta (hours = 12 ))))
54
61
@@ -62,6 +69,7 @@ def testParse(self):
62
69
self .assertEqual (dm ('+1M' ).format (iso8601 ), arrow .utcnow ().shift (months = + 1 ).format (iso8601 ))
63
70
self .assertEqual (dm ('+1Y' ).format (iso8601 ), arrow .utcnow ().shift (years = + 1 ).format (iso8601 ))
64
71
self .assertEqual (dm ('+1y' ).format (iso8601 ), arrow .utcnow ().shift (years = + 1 ).format (iso8601 ))
72
+
65
73
# subtraction
66
74
self .assertEqual (dm ('-1s' ).format (iso8601 ), arrow .utcnow ().shift (seconds = - 1 ).format (iso8601 ))
67
75
self .assertEqual (dm ('-1m' ).format (iso8601 ), arrow .utcnow ().shift (minutes = - 1 ).format (iso8601 ))
@@ -71,6 +79,7 @@ def testParse(self):
71
79
self .assertEqual (dm ('-1M' ).format (iso8601 ), arrow .utcnow ().shift (months = - 1 ).format (iso8601 ))
72
80
self .assertEqual (dm ('-1Y' ).format (iso8601 ), arrow .utcnow ().shift (years = - 1 ).format (iso8601 ))
73
81
self .assertEqual (dm ('-1y' ).format (iso8601 ), arrow .utcnow ().shift (years = - 1 ).format (iso8601 ))
82
+
74
83
# rounding
75
84
self .assertEqual (dm ('/s' ).format (iso8601 ), arrow .utcnow ().floor ('second' ).format (iso8601 ))
76
85
self .assertEqual (dm ('/m' ).format (iso8601 ), arrow .utcnow ().floor ('minute' ).format (iso8601 ))
@@ -80,6 +89,7 @@ def testParse(self):
80
89
self .assertEqual (dm ('/M' ).format (iso8601 ), arrow .utcnow ().floor ('month' ).format (iso8601 ))
81
90
self .assertEqual (dm ('/Y' ).format (iso8601 ), arrow .utcnow ().floor ('year' ).format (iso8601 ))
82
91
self .assertEqual (dm ('/y' ).format (iso8601 ), arrow .utcnow ().floor ('year' ).format (iso8601 ))
92
+
83
93
# rounding up
84
94
self .assertEqual (dm ('/s' , roundDown = False ).format (iso8601 ), arrow .utcnow ().ceil ('second' ).format (iso8601 ))
85
95
self .assertEqual (dm ('/m' , roundDown = False ).format (iso8601 ), arrow .utcnow ().ceil ('minute' ).format (iso8601 ))
@@ -89,8 +99,7 @@ def testParse(self):
89
99
self .assertEqual (dm ('/M' , roundDown = False ).format (iso8601 ), arrow .utcnow ().ceil ('month' ).format (iso8601 ))
90
100
self .assertEqual (dm ('/Y' , roundDown = False ).format (iso8601 ), arrow .utcnow ().ceil ('year' ).format (iso8601 ))
91
101
self .assertEqual (dm ('/y' , roundDown = False ).format (iso8601 ), arrow .utcnow ().ceil ('year' ).format (iso8601 ))
92
-
93
-
102
+
94
103
# roundDown option tests
95
104
self .assertEqual (dm ('2016-01-01T14:00:00||/d' ).format (iso8601 ), '2016-01-01T00:00:00+00:00' )
96
105
self .assertEqual (dm ('2016-01-01T14:00:00||/d' , roundDown = False ).format (iso8601 ), '2016-01-01T23:59:59+00:00' )
@@ -143,6 +152,7 @@ def testParse(self):
143
152
self .assertEqual (dm (1367900664 ).format (iso8601 ), '2013-05-07T04:24:24+00:00' )
144
153
145
154
self .assertRaises (DateMathException , dm , '1451610061000' )
155
+
146
156
try :
147
157
dm (1451610061000 )
148
158
except DateMathException as e :
0 commit comments