diff --git a/xmlschema/tests/test_validators.py b/xmlschema/tests/test_validators.py
index 11367138..b20a2458 100644
--- a/xmlschema/tests/test_validators.py
+++ b/xmlschema/tests/test_validators.py
@@ -1159,6 +1159,47 @@ def test_complex_elements(self):
expected=XMLSchemaValidationError, indent=0, cdata_prefix='#'
)
+ def test_encode_datetime(self):
+ xs = self.get_schema('')
+
+ dt = xs.decode('2019-01-01T13:40:00', datetime_types=True)
+ self.assertEqual(
+ etree_tostring(xs.encode(dt)),
+ '2019-01-01T13:40:00'
+ )
+
+ def test_encode_date(self):
+ xs = self.get_schema('')
+ date = xs.decode('2001-04-15', datetime_types=True)
+ self.assertEqual(
+ etree_tostring(xs.encode(date)),
+ '2001-04-15'
+ )
+
+ def test_duration(self):
+ xs = self.get_schema('')
+ duration = xs.decode('P5Y3MT60H30.001S', datetime_types=True)
+ self.assertEqual(
+ etree_tostring(xs.encode(duration)),
+ 'P5Y3M2DT12H30.001S'
+ )
+
+ def test_gregorian_year(self):
+ xs = self.get_schema('')
+ gyear = xs.decode('2000', datetime_types=True)
+ self.assertEqual(
+ etree_tostring(xs.encode(gyear)),
+ '2000'
+ )
+
+ def test_gregorian_yearmonth(self):
+ xs = self.get_schema('')
+ gyear_month = xs.decode('2000-12', datetime_types=True)
+ self.assertEqual(
+ etree_tostring(xs.encode(gyear_month)),
+ '2000-12'
+ )
+
class TestEncoding11(TestEncoding):
schema_class = XMLSchema11
diff --git a/xmlschema/validators/builtins.py b/xmlschema/validators/builtins.py
index 216f7512..aec3d440 100644
--- a/xmlschema/validators/builtins.py
+++ b/xmlschema/validators/builtins.py
@@ -416,28 +416,28 @@ def python_to_boolean(obj):
# --- Year related primitive types (year 0 not allowed) ---
{
'name': XSD_DATETIME,
- 'python_type': (unicode_type, str, datatypes.DateTime),
+ 'python_type': (unicode_type, str, datatypes.DateTime10),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.DateTime10.fromstring,
}, # [-][Y*]YYYY-MM-DD[Thh:mm:ss]
{
'name': XSD_DATE,
- 'python_type': (unicode_type, str, datatypes.Date),
+ 'python_type': (unicode_type, str, datatypes.Date10),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.Date10.fromstring,
}, # [-][Y*]YYYY-MM-DD
{
'name': XSD_GYEAR,
- 'python_type': (unicode_type, str, datatypes.GregorianYear),
+ 'python_type': (unicode_type, str, datatypes.GregorianYear10),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.GregorianYear10.fromstring,
}, # [-][Y*]YYYY
{
'name': XSD_GYEAR_MONTH,
- 'python_type': (unicode_type, str, datatypes.GregorianYearMonth),
+ 'python_type': (unicode_type, str, datatypes.GregorianYearMonth10),
'admitted_facets': DATETIME_FACETS,
'facets': [COLLAPSE_WHITE_SPACE_ELEMENT],
'to_python': datatypes.GregorianYearMonth10.fromstring,