@@ -15,6 +15,9 @@ class TestDM(unittest.TestCase):
15
15
16
16
17
17
def testParse (self ):
18
+ # Make sure our helpers return the correct objects
19
+ self .assertIsInstance (datemath ('now' ), pydatetime )
20
+ self .assertIsInstance (dm ('now' ), arrow .arrow .Arrow )
18
21
19
22
# Baisc dates
20
23
self .assertEqual (dm ('2016.01.02' ).format (iso8601 ), '2016-01-02T00:00:00+00:00' )
@@ -42,13 +45,16 @@ def testParse(self):
42
45
self .assertEqual (dm ('2016-01-01' , tz = 'US/Eastern' ), pydatetime (2016 , 1 , 1 , tzinfo = tz .gettz ('US/Eastern' )))
43
46
self .assertEqual (datemath ('2016-01-01T01:00:00' , tz = 'US/Central' ), pydatetime (2016 , 1 , 1 , 1 , 0 , 0 , tzinfo = tz .gettz ('US/Central' )))
44
47
self .assertEqual (datemath ('2016-01-01T02:00:00' , tz = 'US/Eastern' ), pydatetime (2016 , 1 , 1 , 2 , tzinfo = tz .gettz ('US/Eastern' )))
48
+
45
49
# TZ offset inside of date string
46
50
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
51
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
52
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 ))))
53
+
49
54
# TZ offset inside of date string with datemath
50
55
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
56
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 ))))
57
+
52
58
# 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
59
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
60
@@ -62,6 +68,7 @@ def testParse(self):
62
68
self .assertEqual (dm ('+1M' ).format (iso8601 ), arrow .utcnow ().shift (months = + 1 ).format (iso8601 ))
63
69
self .assertEqual (dm ('+1Y' ).format (iso8601 ), arrow .utcnow ().shift (years = + 1 ).format (iso8601 ))
64
70
self .assertEqual (dm ('+1y' ).format (iso8601 ), arrow .utcnow ().shift (years = + 1 ).format (iso8601 ))
71
+
65
72
# subtraction
66
73
self .assertEqual (dm ('-1s' ).format (iso8601 ), arrow .utcnow ().shift (seconds = - 1 ).format (iso8601 ))
67
74
self .assertEqual (dm ('-1m' ).format (iso8601 ), arrow .utcnow ().shift (minutes = - 1 ).format (iso8601 ))
@@ -71,6 +78,7 @@ def testParse(self):
71
78
self .assertEqual (dm ('-1M' ).format (iso8601 ), arrow .utcnow ().shift (months = - 1 ).format (iso8601 ))
72
79
self .assertEqual (dm ('-1Y' ).format (iso8601 ), arrow .utcnow ().shift (years = - 1 ).format (iso8601 ))
73
80
self .assertEqual (dm ('-1y' ).format (iso8601 ), arrow .utcnow ().shift (years = - 1 ).format (iso8601 ))
81
+
74
82
# rounding
75
83
self .assertEqual (dm ('/s' ).format (iso8601 ), arrow .utcnow ().floor ('second' ).format (iso8601 ))
76
84
self .assertEqual (dm ('/m' ).format (iso8601 ), arrow .utcnow ().floor ('minute' ).format (iso8601 ))
@@ -80,6 +88,7 @@ def testParse(self):
80
88
self .assertEqual (dm ('/M' ).format (iso8601 ), arrow .utcnow ().floor ('month' ).format (iso8601 ))
81
89
self .assertEqual (dm ('/Y' ).format (iso8601 ), arrow .utcnow ().floor ('year' ).format (iso8601 ))
82
90
self .assertEqual (dm ('/y' ).format (iso8601 ), arrow .utcnow ().floor ('year' ).format (iso8601 ))
91
+
83
92
# rounding up
84
93
self .assertEqual (dm ('/s' , roundDown = False ).format (iso8601 ), arrow .utcnow ().ceil ('second' ).format (iso8601 ))
85
94
self .assertEqual (dm ('/m' , roundDown = False ).format (iso8601 ), arrow .utcnow ().ceil ('minute' ).format (iso8601 ))
@@ -89,8 +98,7 @@ def testParse(self):
89
98
self .assertEqual (dm ('/M' , roundDown = False ).format (iso8601 ), arrow .utcnow ().ceil ('month' ).format (iso8601 ))
90
99
self .assertEqual (dm ('/Y' , roundDown = False ).format (iso8601 ), arrow .utcnow ().ceil ('year' ).format (iso8601 ))
91
100
self .assertEqual (dm ('/y' , roundDown = False ).format (iso8601 ), arrow .utcnow ().ceil ('year' ).format (iso8601 ))
92
-
93
-
101
+
94
102
# roundDown option tests
95
103
self .assertEqual (dm ('2016-01-01T14:00:00||/d' ).format (iso8601 ), '2016-01-01T00:00:00+00:00' )
96
104
self .assertEqual (dm ('2016-01-01T14:00:00||/d' , roundDown = False ).format (iso8601 ), '2016-01-01T23:59:59+00:00' )
@@ -143,6 +151,7 @@ def testParse(self):
143
151
self .assertEqual (dm (1367900664 ).format (iso8601 ), '2013-05-07T04:24:24+00:00' )
144
152
145
153
self .assertRaises (DateMathException , dm , '1451610061000' )
154
+
146
155
try :
147
156
dm (1451610061000 )
148
157
except DateMathException as e :
0 commit comments