8000 Merge pull request #6185 from ultra-andy/branch-csv2rec-datetime-dayf… · matplotlib/matplotlib@a919ac7 · GitHub
[go: up one dir, main page]

Skip to content

Commit a919ac7

Browse files
committed
Merge pull request #6185 from ultra-andy/branch-csv2rec-datetime-dayfirst-bug
FIX: csv2rec bug Closes #6184
1 parent 19c631b commit a919ac7

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

lib/matplotlib/mlab.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2833,7 +2833,14 @@ def mybool(x):
28332833
raise ValueError('invalid bool')
28342834

28352835
dateparser = dateutil.parser.parse
2836-
mydateparser = with_default_value(dateparser, datetime.date(1, 1, 1))
2836+
2837+
def mydateparser(x):
2838+
# try and return a datetime object
2839+
d = dateparser(x, dayfirst=dayfirst, yearfirst=yearfirst)
2840+
return d
2841+
2842+
mydateparser = with_default_value(mydateparser, datetime.datetime(1, 1, 1))
2843+
28372844
myfloat = with_default_value(float, np.nan)
28382845
myint = with_default_value(int, -1)
28392846
mystr = with_default_value(str, '')

lib/matplotlib/tests/test_mlab.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from numpy.testing import assert_allclose, assert_array_equal
99
import numpy.ma.testutils as matest
1010
import numpy as np
11+
import datetime as datetime
1112
from nose.tools import (assert_equal, assert_almost_equal, assert_not_equal,
1213
assert_true, assert_raises)
1314

@@ -346,6 +347,51 @@ def test_csv2rec_names_with_comments(self):
346347
assert len(array) == 2
347348
assert len(array.dtype) == 3
348349

350+
def test_csv2rec_usdate(self):
351+
self.fd.write('01/11/14\n' +
352+
'03/05/76 12:00:01 AM\n' +
353+
'07/09/83 5:17:34 PM\n' +
354+
'06/20/2054 2:31:45 PM\n' +
355+
'10/31/00 11:50:23 AM\n')
356+
expected = [datetime.datetime(2014, 1, 11, 0, 0),
357+
datetime.datetime(1976, 3, 5, 0, 0, 1),
358+
datetime.datetime(1983, 7, 9, 17, 17, 34),
359+
datetime.datetime(2054, 6, 20, 14, 31, 45),
360+
datetime.datetime(2000, 10, 31, 11, 50, 23)]
361+
self.fd.seek(0)
362+
array = mlab.csv2rec(self.fd, names='a')
363+
assert_array_equal(array['a'].tolist(), expected)
364+
365+
def test_csv2rec_dayfirst(self):
366+
self.fd.write('11/01/14\n' +
367+
'05/03/76 12:00:01 AM\n' +
368+
'09/07/83 5:17:34 PM\n' +
369+
'20/06/2054 2:31:45 PM\n' +
370+
'31/10/00 11:50:23 AM\n')
371+
expected = [datetime.datetime(2014, 1, 11, 0, 0),
372+
datetime.datetime(1976, 3, 5, 0, 0, 1),
373+
datetime.datetime(1983, 7, 9, 17, 17, 34),
374+
datetime.datetime(2054, 6, 20, 14, 31, 45),
375+
datetime.datetime(2000, 10, 31, 11, 50, 23)]
376+
self.fd.seek(0)
377+
array = mlab.csv2rec(self.fd, names='a', dayfirst=True)
378+
assert_array_equal(array['a'].tolist(), expected)
379+
380+
def test_csv2rec_yearfirst(self):
381+
self.fd.write('14/01/11\n' +
382+
'76/03/05 12:00:01 AM\n' +
383+
'83/07/09 5:17:34 PM\n' +
384+
'2054/06/20 2:31:45 PM\n' +
385+
'00/10/31 11:50:23 AM\n')
386+
expected = [datetime.datetime(2014, 1, 11, 0, 0),
387+
datetime.datetime(1976, 3, 5, 0, 0, 1),
388+
datetime.datetime(1983, 7, 9, 17, 17, 34),
389+
datetime.datetime(2054, 6, 20, 14, 31, 45),
390+
datetime.datetime(2000, 10, 31, 11, 50, 23)]
391+
self.fd.seek(0)
392+
array = mlab.csv2rec(self.fd, names='a', yearfirst=True)
393+
assert_array_equal(array['a'].tolist(), expected)
394+
349395

350396
class window_testcase(CleanupTestCase):
351397
def setUp(self):

0 commit comments

Comments
 (0)
0