Repository: python-jsonschema/jsonschema
Issue: YYYY-M-D is incorrectly allowed as a format for dates

Hi, 
I'm struggling with validating "date" type. According to [specifications](https://tools.ietf.org/html/rfc3339#section-5.6) it should be in format `YYYY-MM-DD` (4 digits - 2 digits - 2 digits) but this jsonschema validator is ok with `YYYY-M-D`.

Example schema snippet:
```
"d": {
    "type": "string",
    "format": "date"
}
```

If I test it in https://www.jsonschemavalidator.net/ it properly throws error: `String '2000-1-01' does not validate against format 'date'.`

I don't think that is expected behaviour.

See live demo here: https://repl.it/@TomasPalider/QueasyDrabServerapplication

I came up with workaround by combination date and regex but I don't like it since schema validation should be strict.
```
"d": {
    "type": "string",
    "format": "date",
    "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
}
```


Changed files:
jsonschema/_format.py, jsonschema/tests/test_jsonschema_test_suite.py

diff --git a/jsonschema/_format.py b/jsonschema/_format.py
index fc44442..ce47864 100644
--- a/jsonschema/_format.py
+++ b/jsonschema/_format.py
@@ -319,11 +319,18 @@ def is_regex(instance):
     return re.compile(instance)
 
 
+if hasattr(datetime.date, "fromisoformat"):
+    _is_date = datetime.date.fromisoformat
+else:
+    def _is_date(instance):
+        return datetime.datetime.strptime(instance, "%Y-%m-%d")
+
+
 @_checks_drafts(draft3="date", draft7="date", raises=ValueError)
 def is_date(instance):
     if not isinstance(instance, str):
         return True
-    return datetime.datetime.strptime(instance, "%Y-%m-%d")
+    return _is_date(instance)
 
 
 @_checks_drafts(draft3="time", raises=ValueError)
diff --git a/jsonschema/tests/test_jsonschema_test_suite.py b/jsonschema/tests/test_jsonschema_test_suite.py
index 177d549..0f9698a 100644
--- a/jsonschema/tests/test_jsonschema_test_suite.py
+++ b/jsonschema/tests/test_jsonschema_test_suite.py
@@ -87,6 +87,24 @@ else:
         return
 
 
+if sys.version_info < (3, 7):
+    message = "datetime.date.fromisoformat is new in 3.7+"
+
+    def missing_date_fromisoformat(test):
+        return skip(
+            message=message,
+            subject="date",
+            description="invalidates non-padded month dates",
+        )(test) or skip(
+            message=message,
+            subject="date",
+            description="invalidates non-padded day dates",
+        )(test)
+else:
+    def missing_date_fromisoformat(test):
+        return
+
+
 TestDraft3 = DRAFT3.to_unittest_testcase(
     DRAFT3.tests(),
     DRAFT3.format_tests(),
@@ -97,18 +115,9 @@ TestDraft3 = DRAFT3.to_unittest_testcase(
     format_checker=draft3_format_checker,
     skip=lambda test: (
         narrow_unicode_build(test)
+        or missing_date_fromisoformat(test)
         or missing_format(draft3_format_checker)(test)
         or complex_email_validation(test)
-        or skip(
-            message=bug(685),
-            subject="date",
-            description="invalidates non-padded month dates",
-        )(test)
-        or skip(
-            message=bug(685),
-            subject="date",
-            description="invalidates non-padded day dates",
-        )(test)
         or skip(
             message="Upstream bug in strict_rfc3339",
             subject="date-time",
@@ -158,6 +167,7 @@ TestDraft4 = DRAFT4.to_unittest_testcase(
     format_checker=draft4_format_checker,
     skip=lambda test: (
         narrow_unicode_build(test)
+        or missing_date_fromisoformat(test)
         or missing_format(draft4_format_checker)(test)
         or complex_email_validation(test)
         or skip(
@@ -237,6 +247,7 @@ TestDraft6 = DRAFT6.to_unittest_testcase(
     format_checker=draft6_format_checker,
     skip=lambda test: (
         narrow_unicode_build(test)
+        or missing_date_fromisoformat(test)
         or missing_format(draft6_format_checker)(test)
         or complex_email_validation(test)
         or skip(
@@ -337,6 +348,7 @@ TestDraft7 = DRAFT7.to_unittest_testcase(
     format_checker=draft7_format_checker,
     skip=lambda test: (
         narrow_unicode_build(test)
+        or missing_date_fromisoformat(test)
         or missing_format(draft7_format_checker)(test)
         or complex_email_validation(test)
         or skip(
@@ -368,16 +380,6 @@ TestDraft7 = DRAFT7.to_unittest_testcase(
             subject="refRemote",
             case_description="base URI change - change folder in subschema",
         )(test)
-        or skip(
-            message=bug(685),
-            subject="date",
-            description="invalidates non-padded month dates",
-        )(test)
-        or skip(
-            message=bug(685),
-            subject="date",
-            description="invalidates non-padded day dates",
-        )(test)
         or skip(
             message="Upstream bug in strict_rfc3339",
             subject="date-time",