diff --git a/geopandas/io/file.py b/geopandas/io/file.py index 8c78dd3..5fdee3b 100644 --- a/geopandas/io/file.py +++ b/geopandas/io/file.py @@ -140,6 +140,9 @@ def infer_schema(df): def convert_type(column, in_type): if in_type == object: return 'str' + if in_type.name.startswith('datetime64'): + # numpy datetime type regardless of frequency + return 'datetime' out_type = type(np.zeros(1, in_type).item()).__name__ if out_type == 'long': out_type = 'int' diff --git a/geopandas/io/tests/test_file.py b/geopandas/io/tests/test_file.py index 508e937..c49d1f3 100644 --- a/geopandas/io/tests/test_file.py +++ b/geopandas/io/tests/test_file.py @@ -1,8 +1,10 @@ from __future__ import absolute_import from collections import OrderedDict +import datetime from distutils.version import LooseVersion import os +import sys import numpy as np @@ -97,6 +99,22 @@ def test_to_file_bool(tmpdir, driver, ext): assert_geodataframe_equal(result, df, check_column_type=False) +@pytest.mark.skipif( + (sys.version_info < (3, 0)) and sys.platform.startswith('win'), + reason="GPKG tests failing on AppVeyor for Python 2.7") +def test_to_file_datetime(tmpdir): + """Test writing a data file with the datetime column type""" + tempfilename = os.path.join(str(tmpdir), 'test_datetime.gpkg') + point = Point(0, 0) + now = datetime.datetime.now() + df = GeoDataFrame( + {'a': [1, 2], 'b': [now, now]}, + geometry=[point, point], crs={}) + df.to_file(tempfilename, driver='GPKG') + df_read = read_file(tempfilename) + assert_geoseries_equal(df.geometry, df_read.geometry) + + @pytest.mark.parametrize( 'ext, driver', [('shp', 'ESRI Shapefile'), ('geojson', 'GeoJSON')]) def test_to_file_with_point_z(tmpdir, ext, driver):