diff --git a/base/dart/test/inputs/json/misc/016af.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/016af.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/016af.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/016af.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/033b1.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/033b1.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/033b1.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/033b1.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/0a358.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/0a358.json/default/TopLevel.dart
index 0b5e83a..2c3547b 100644
--- a/base/dart/test/inputs/json/misc/0a358.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/0a358.json/default/TopLevel.dart
@@ -77,10 +77,10 @@ class Result {
 
     factory Result.fromJson(Map<String, dynamic> json) => Result(
         code: json["code"],
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         id: json["id"],
         name: json["name"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         uri: json["uri"],
     );
 
@@ -93,3 +93,11 @@ class Result {
         "uri": uri,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/0a91a.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/0a91a.json/default/TopLevel.dart
index 9e427ee..69b84f4 100644
--- a/base/dart/test/inputs/json/misc/0a91a.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/0a91a.json/default/TopLevel.dart
@@ -31,7 +31,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         actor: Actor.fromJson(json["actor"]),
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         id: json["id"],
         org: json["org"] == null ? null : Actor.fromJson(json["org"]),
         payload: Payload.fromJson(json["payload"]),
@@ -302,12 +302,12 @@ class PullRequest {
         base: Base.fromJson(json["base"]),
         body: json["body"],
         changedFiles: json["changed_files"],
-        closedAt: DateTime.parse(json["closed_at"]),
+        closedAt: _parseDateTime(json["closed_at"]),
         comments: json["comments"],
         commentsUrl: json["comments_url"],
         commits: json["commits"],
         commitsUrl: json["commits_url"],
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         deletions: json["deletions"],
         diffUrl: json["diff_url"],
         head: Base.fromJson(json["head"]),
@@ -321,7 +321,7 @@ class PullRequest {
         mergeable: (json.containsKey("mergeable") ? json["mergeable"] : throw FormatException('Missing required property')),
         mergeableState: json["mergeable_state"],
         merged: json["merged"],
-        mergedAt: DateTime.parse(json["merged_at"]),
+        mergedAt: _parseDateTime(json["merged_at"]),
         mergedBy: MergedBy.fromJson(json["merged_by"]),
         milestone: (json.containsKey("milestone") ? json["milestone"] : throw FormatException('Missing required property')),
         number: json["number"],
@@ -334,7 +334,7 @@ class PullRequest {
         state: json["state"],
         statusesUrl: json["statuses_url"],
         title: json["title"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         url: json["url"],
         user: MergedBy.fromJson(json["user"]),
     );
@@ -571,7 +571,7 @@ class BaseRepo {
         compareUrl: json["compare_url"],
         contentsUrl: json["contents_url"],
         contributorsUrl: json["contributors_url"],
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         defaultBranch: json["default_branch"],
         deploymentsUrl: json["deployments_url"],
         description: (json.containsKey("description") ? json["description"] : throw FormatException('Missing required property')),
@@ -612,7 +612,7 @@ class BaseRepo {
         owner: MergedBy.fromJson(json["owner"]),
         private: json["private"],
         pullsUrl: json["pulls_url"],
-        pushedAt: DateTime.parse(json["pushed_at"]),
+        pushedAt: _parseDateTime(json["pushed_at"]),
         releasesUrl: json["releases_url"],
         size: json["size"],
         sshUrl: json["ssh_url"],
@@ -625,7 +625,7 @@ class BaseRepo {
         tagsUrl: json["tags_url"],
         teamsUrl: json["teams_url"],
         treesUrl: json["trees_url"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         url: json["url"],
         watchers: json["watchers"],
         watchersCount: json["watchers_count"],
@@ -895,3 +895,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/0e0c2.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/0e0c2.json/default/TopLevel.dart
index d4cd93f..0df76d9 100644
--- a/base/dart/test/inputs/json/misc/0e0c2.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/0e0c2.json/default/TopLevel.dart
@@ -80,7 +80,7 @@ class Result {
         id: json["id"],
         images: List<Image>.from(json["images"].map((x) => Image.fromJson(x))),
         language: resultLanguageValues.map[json["language"]]!,
-        releaseDate: DateTime.parse(json["release_date"]),
+        releaseDate: _parseDateTime(json["release_date"]),
         stars: json["stars"],
         tags: (json.containsKey("tags") ? json["tags"] : throw FormatException('Missing required property')) == null ? null : List<dynamic>.from((json.containsKey("tags") ? json["tags"] : throw FormatException('Missing required property'))!.map((x) => x)),
         title: json["title"],
@@ -325,3 +325,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/167d6.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/167d6.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/167d6.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/167d6.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/16bc5.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/16bc5.json/default/TopLevel.dart
index ea6fc77..5c56de9 100644
--- a/base/dart/test/inputs/json/misc/16bc5.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/16bc5.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -415,3 +415,11 @@ class Wind {
         "speed": speed,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/1b28c.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/1b28c.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/1b28c.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/1b28c.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/1b409.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/1b409.json/default/TopLevel.dart
index 11a49c7..3ac2bf1 100644
--- a/base/dart/test/inputs/json/misc/1b409.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/1b409.json/default/TopLevel.dart
@@ -105,7 +105,7 @@ class Object {
         current: json["current"],
         description: json["description"],
         district: json["district"],
-        enddate: DateTime.parse(json["enddate"]),
+        enddate: _parseDateTime(json["enddate"]),
         extra: Extra.fromJson(json["extra"]),
         id: json["id"],
         leadershipTitle: (json.containsKey("leadership_title") ? json["leadership_title"] : throw FormatException('Missing required property')),
@@ -116,7 +116,7 @@ class Object {
         roleTypeLabel: roleTypeLabelValues.map[json["role_type_label"]]!,
         senatorClass: (json.containsKey("senator_class") ? json["senator_class"] : throw FormatException('Missing required property')),
         senatorRank: (json.containsKey("senator_rank") ? json["senator_rank"] : throw FormatException('Missing required property')),
-        startdate: DateTime.parse(json["startdate"]),
+        startdate: _parseDateTime(json["startdate"]),
         state: json["state"],
         title: titleValues.map[json["title"]]!,
         titleLong: roleTypeLabelValues.map[json["title_long"]]!,
@@ -233,7 +233,7 @@ class Person {
 
     factory Person.fromJson(Map<String, dynamic> json) => Person(
         bioguideid: json["bioguideid"],
-        birthday: DateTime.parse(json["birthday"]),
+        birthday: _parseDateTime(json["birthday"]),
         cspanid: json["cspanid"],
         firstname: json["firstname"],
         gender: genderValues.map[json["gender"]]!,
@@ -351,3 +351,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/262f0.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/262f0.json/default/TopLevel.dart
index 1c1c48f..7069d12 100644
--- a/base/dart/test/inputs/json/misc/262f0.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/262f0.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -439,3 +439,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/2d4e2.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/2d4e2.json/default/TopLevel.dart
index 764956c..e5676c0 100644
--- a/base/dart/test/inputs/json/misc/2d4e2.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/2d4e2.json/default/TopLevel.dart
@@ -109,7 +109,7 @@ class Object {
         current: json["current"],
         description: json["description"],
         district: (json.containsKey("district") ? json["district"] : throw FormatException('Missing required property')),
-        enddate: DateTime.parse(json["enddate"]),
+        enddate: _parseDateTime(json["enddate"]),
         extra: Extra.fromJson(json["extra"]),
         id: json["id"],
         leadershipTitle: (json.containsKey("leadership_title") ? json["leadership_title"] : throw FormatException('Missing required property')),
@@ -122,7 +122,7 @@ class Object {
         senatorClassLabel: senatorClassLabelValues.map[json["senator_class_label"]]!,
         senatorRank: senatorRankValues.map[json["senator_rank"]]!,
         senatorRankLabel: senatorRankLabelValues.map[json["senator_rank_label"]]!,
-        startdate: DateTime.parse(json["startdate"]),
+        startdate: _parseDateTime(json["startdate"]),
         state: json["state"],
         title: titleValues.map[json["title"]]!,
         titleLong: roleTypeLabelValues.map[json["title_long"]]!,
@@ -243,7 +243,7 @@ class Person {
 
     factory Person.fromJson(Map<String, dynamic> json) => Person(
         bioguideid: json["bioguideid"],
-        birthday: DateTime.parse(json["birthday"]),
+        birthday: _parseDateTime(json["birthday"]),
         cspanid: json["cspanid"],
         firstname: json["firstname"],
         gender: genderValues.map[json["gender"]]!,
@@ -395,3 +395,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/32d5c.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/32d5c.json/default/TopLevel.dart
index 3b72bc7..11f99f1 100644
--- a/base/dart/test/inputs/json/misc/32d5c.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/32d5c.json/default/TopLevel.dart
@@ -30,7 +30,7 @@ class TopLevel {
     });
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
-        birthDate: (json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property'))),
+        birthDate: (json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("BirthDate") ? json["BirthDate"] : throw FormatException('Missing required property'))),
         birthDateIsProtected: json["BirthDateIsProtected"],
         genderTypeId: json["GenderTypeID"],
         notes: json["Notes"],
@@ -51,3 +51,11 @@ class TopLevel {
         "PreferredName": preferredName,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/337ed.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/337ed.json/default/TopLevel.dart
index 79d45ab..604ad44 100644
--- a/base/dart/test/inputs/json/misc/337ed.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/337ed.json/default/TopLevel.dart
@@ -131,11 +131,11 @@ class Result {
         costAbsolute: (json.containsKey("cost_absolute") ? json["cost_absolute"] : throw FormatException('Missing required property')),
         costMax: (json.containsKey("cost_max") ? json["cost_max"] : throw FormatException('Missing required property')),
         costMin: (json.containsKey("cost_min") ? json["cost_min"] : throw FormatException('Missing required property')),
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         customIncomes: List<CustomIncome>.from(json["customIncomes"].map((x) => CustomIncome.fromJson(x))),
         directRepCostsMax: (json.containsKey("direct_rep_costs_max") ? json["direct_rep_costs_max"] : throw FormatException('Missing required property')),
         directRepCostsMin: (json.containsKey("direct_rep_costs_min") ? json["direct_rep_costs_min"] : throw FormatException('Missing required property')),
-        endDate: DateTime.parse(json["end_date"]),
+        endDate: _parseDateTime(json["end_date"]),
         eurSourcesGrants: json["eur_sources_grants"],
         eurSourcesGrantsSrc: (json.containsKey("eur_sources_grants_src") ? json["eur_sources_grants_src"] : throw FormatException('Missing required property')),
         eurSourcesProcurement: json["eur_sources_procurement"],
@@ -151,14 +151,14 @@ class Result {
         publicFinancingNational: (json.containsKey("public_financing_national") ? json["public_financing_national"] : throw FormatException('Missing required property')),
         publicFinancingTotal: (json.containsKey("public_financing_total") ? json["public_financing_total"] : throw FormatException('Missing required property')),
         representative: json["representative"],
-        startDate: DateTime.parse(json["start_date"]),
+        startDate: _parseDateTime(json["start_date"]),
         status: statusValues.map[json["status"]]!,
         totalBudget: (json.containsKey("total_budget") ? json["total_budget"] : throw FormatException('Missing required property')),
         turnoverAbsolute: (json.containsKey("turnover_absolute") ? json["turnover_absolute"] : throw FormatException('Missing required property')),
         turnoverMax: (json.containsKey("turnover_max") ? json["turnover_max"] : throw FormatException('Missing required property')),
         turnoverMin: (json.containsKey("turnover_min") ? json["turnover_min"] : throw FormatException('Missing required property')),
         type: resultTypeValues.map[json["type"]]!,
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         uri: json["uri"],
     );
 
@@ -221,12 +221,12 @@ class CustomIncome {
 
     factory CustomIncome.fromJson(Map<String, dynamic> json) => CustomIncome(
         amount: json["amount"],
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         id: json["id"],
         name: json["name"],
         status: statusValues.map[json["status"]]!,
         type: customIncomeTypeValues.map[json["type"]]!,
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         uri: json["uri"],
     );
 
@@ -285,3 +285,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/3659d.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/3659d.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/3659d.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/3659d.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/3f1ce.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/3f1ce.json/default/TopLevel.dart
index 037c9d2..1ad421b 100644
--- a/base/dart/test/inputs/json/misc/3f1ce.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/3f1ce.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -435,3 +435,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/43eaf.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/43eaf.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/43eaf.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/43eaf.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/4961a.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/4961a.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/4961a.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/4961a.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/4a0d7.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/4a0d7.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/4a0d7.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/4a0d7.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/4c547.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/4c547.json/default/TopLevel.dart
index ea6fc77..5c56de9 100644
--- a/base/dart/test/inputs/json/misc/4c547.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/4c547.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -415,3 +415,11 @@ class Wind {
         "speed": speed,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/4e336.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/4e336.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/4e336.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/4e336.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/54d32.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/54d32.json/default/TopLevel.dart
index d16ff46..15ed2ea 100644
--- a/base/dart/test/inputs/json/misc/54d32.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/54d32.json/default/TopLevel.dart
@@ -76,12 +76,12 @@ class Result {
     });
 
     factory Result.fromJson(Map<String, dynamic> json) => Result(
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         id: json["id"],
         personId: json["person_id"],
         representativeId: json["representative_id"],
         status: statusValues.map[json["status"]]!,
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
     );
 
     Map<String, dynamic> toJson() => {
@@ -115,3 +115,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/5eae5.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/5eae5.json/default/TopLevel.dart
index f1df9d0..67d4e5a 100644
--- a/base/dart/test/inputs/json/misc/5eae5.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/5eae5.json/default/TopLevel.dart
@@ -22,7 +22,7 @@ class TopLevel {
     });
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
-        date: DateTime.parse(json["Date"]),
+        date: _parseDateTime(json["Date"]),
         id: json["ID"],
         sponsor: json["Sponsor"],
         title: json["Title"],
@@ -35,3 +35,11 @@ class TopLevel {
         "Title": title,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/5f3a1.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/5f3a1.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/5f3a1.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/5f3a1.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/6260a.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/6260a.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/6260a.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/6260a.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/65dec.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/65dec.json/default/TopLevel.dart
index c13a826..e90bd25 100644
--- a/base/dart/test/inputs/json/misc/65dec.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/65dec.json/default/TopLevel.dart
@@ -45,7 +45,7 @@ class TopLevel {
         mkmId: json["mkm_id"],
         mkmName: json["mkm_name"],
         name: json["name"],
-        releaseDate: DateTime.parse(json["releaseDate"]),
+        releaseDate: _parseDateTime(json["releaseDate"]),
         type: json["type"],
     );
 
@@ -284,7 +284,7 @@ class Ruling {
     });
 
     factory Ruling.fromJson(Map<String, dynamic> json) => Ruling(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         text: json["text"],
     );
 
@@ -323,3 +323,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/6dec6.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/6dec6.json/default/TopLevel.dart
index 81c258e..897422b 100644
--- a/base/dart/test/inputs/json/misc/6dec6.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/6dec6.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -439,3 +439,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/70c77.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/70c77.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/70c77.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/70c77.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/734ad.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/734ad.json/default/TopLevel.dart
index 3b467c3..fb9e36d 100644
--- a/base/dart/test/inputs/json/misc/734ad.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/734ad.json/default/TopLevel.dart
@@ -199,7 +199,7 @@ class Result {
         beOfficeTown: json["be_office_town"],
         codeOfConduct: json["code_of_conduct"],
         contactCountry: json["contact_country"],
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         entity: json["entity"],
         goals: json["goals"],
         head: json["head"],
@@ -214,7 +214,7 @@ class Result {
         id: json["id"],
         identificationCode: json["identification_code"],
         infoMembers: json["info_members"],
-        lastUpdateDate: DateTime.parse(json["last_update_date"]),
+        lastUpdateDate: _parseDateTime(json["last_update_date"]),
         legal: json["legal"],
         legalStatus: json["legal_status"],
         mainCategory: json["main_category"],
@@ -230,12 +230,12 @@ class Result {
         networking: (json.containsKey("networking") ? json["networking"] : throw FormatException('Missing required property')),
         numberOfNaturalPersons: (json.containsKey("number_of_natural_persons") ? json["number_of_natural_persons"] : throw FormatException('Missing required property')),
         otherCodeOfConduct: (json.containsKey("other_code_of_conduct") ? json["other_code_of_conduct"] : throw FormatException('Missing required property')),
-        registrationDate: DateTime.parse(json["registration_date"]),
+        registrationDate: _parseDateTime(json["registration_date"]),
         status: statusValues.map[json["status"]]!,
         structureMembers: json["structure_members"],
         subCategory: json["sub_category"],
         subCategoryTitle: json["sub_category_title"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         uri: json["uri"],
         webSiteUrl: (json.containsKey("web_site_url") ? json["web_site_url"] : throw FormatException('Missing required property')),
     );
@@ -323,3 +323,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/75912.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/75912.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/75912.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/75912.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/77392.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/77392.json/default/TopLevel.dart
index ea838e5..0d267bf 100644
--- a/base/dart/test/inputs/json/misc/77392.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/77392.json/default/TopLevel.dart
@@ -35,7 +35,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         designation: json["designation"],
-        discoveryDate: DateTime.parse(json["discovery_date"]),
+        discoveryDate: _parseDateTime(json["discovery_date"]),
         hMag: json["h_mag"],
         iDeg: json["i_deg"],
         moidAu: json["moid_au"],
@@ -107,3 +107,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/7dfa6.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/7dfa6.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/7dfa6.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/7dfa6.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/7f568.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/7f568.json/default/TopLevel.dart
index 8b7058f..80a2875 100644
--- a/base/dart/test/inputs/json/misc/7f568.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/7f568.json/default/TopLevel.dart
@@ -49,7 +49,7 @@ class TopLevel {
         comments: json["comments"],
         commentsUrl: json["comments_url"],
         commitsUrl: json["commits_url"],
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         description: (json.containsKey("description") ? json["description"] : throw FormatException('Missing required property')),
         files: Map.from(json["files"]).map((k, v) => MapEntry<String, FileValue>(k, FileValue.fromJson(v))),
         forksUrl: json["forks_url"],
@@ -59,7 +59,7 @@ class TopLevel {
         id: json["id"],
         public: json["public"],
         truncated: json["truncated"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         url: json["url"],
         user: (json.containsKey("user") ? json["user"] : throw FormatException('Missing required property')),
     );
@@ -143,3 +143,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/80aff.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/80aff.json/default/TopLevel.dart
index 981b80c..4d62873 100644
--- a/base/dart/test/inputs/json/misc/80aff.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/80aff.json/default/TopLevel.dart
@@ -78,12 +78,12 @@ class Result {
     });
 
     factory Result.fromJson(Map<String, dynamic> json) => Result(
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         id: json["id"],
         items: json["items"],
         name: json["name"],
         parent: (json.containsKey("parent") ? json["parent"] : throw FormatException('Missing required property')),
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         uri: json["uri"],
     );
 
@@ -97,3 +97,11 @@ class Result {
         "uri": uri,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/88130.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/88130.json/default/TopLevel.dart
index ea6fc77..5c56de9 100644
--- a/base/dart/test/inputs/json/misc/88130.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/88130.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -415,3 +415,11 @@ class Wind {
         "speed": speed,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/8a62c.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/8a62c.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/8a62c.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/8a62c.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/9617f.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/9617f.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/9617f.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/9617f.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/9929c.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/9929c.json/default/TopLevel.dart
index ea6fc77..5c56de9 100644
--- a/base/dart/test/inputs/json/misc/9929c.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/9929c.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -415,3 +415,11 @@ class Wind {
         "speed": speed,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/9ac3b.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/9ac3b.json/default/TopLevel.dart
index 4302fb8..bbea5cf 100644
--- a/base/dart/test/inputs/json/misc/9ac3b.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/9ac3b.json/default/TopLevel.dart
@@ -86,7 +86,7 @@ class Result {
     });
 
     factory Result.fromJson(Map<String, dynamic> json) => Result(
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         entity: json["entity"],
         firstName: json["first_name"],
         id: json["id"],
@@ -95,7 +95,7 @@ class Result {
         position: (json.containsKey("position") ? json["position"] : throw FormatException('Missing required property')),
         status: statusValues.map[json["status"]]!,
         title: (json.containsKey("title") ? json["title"] : throw FormatException('Missing required property')) == null ? null : titleValues.map[(json.containsKey("title") ? json["title"] : throw FormatException('Missing required property'))]!,
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         uri: json["uri"],
     );
 
@@ -145,3 +145,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/a0496.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/a0496.json/default/TopLevel.dart
index aedf8b2..6fcfd9b 100644
--- a/base/dart/test/inputs/json/misc/a0496.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/a0496.json/default/TopLevel.dart
@@ -55,15 +55,15 @@ class TopLevel {
         displayUrl: json["display_url"],
         errors: Errors.fromJson(json["errors"]),
         frequency: json["frequency"],
-        fromDate: DateTime.parse(json["from_date"]),
+        fromDate: _parseDateTime(json["from_date"]),
         id: json["id"],
         name: json["name"],
         premium: json["premium"],
         sourceCode: json["source_code"],
         sourceName: json["source_name"],
-        toDate: DateTime.parse(json["to_date"]),
+        toDate: _parseDateTime(json["to_date"]),
         type: json["type"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         urlizeName: json["urlize_name"],
     );
 
@@ -97,3 +97,11 @@ class Errors {
     Map<String, dynamic> toJson() => {
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/a1eca.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/a1eca.json/default/TopLevel.dart
index ea6fc77..5c56de9 100644
--- a/base/dart/test/inputs/json/misc/a1eca.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/a1eca.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -415,3 +415,11 @@ class Wind {
         "speed": speed,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/a9691.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/a9691.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/a9691.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/a9691.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/abb4b.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/abb4b.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/abb4b.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/abb4b.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/ac944.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/ac944.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/ac944.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/ac944.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/b4865.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/b4865.json/default/TopLevel.dart
index 85cc95e..0223b7d 100644
--- a/base/dart/test/inputs/json/misc/b4865.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/b4865.json/default/TopLevel.dart
@@ -49,7 +49,7 @@ class TopLevel {
         recclass: json["recclass"],
         reclat: json["reclat"],
         reclong: json["reclong"],
-        year: json["year"] == null ? null : DateTime.parse(json["year"]),
+        year: json["year"] == null ? null : _parseDateTime(json["year"]),
     );
 
     Map<String, dynamic> toJson() => {
@@ -125,3 +125,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/b6f2c.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/b6f2c.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/b6f2c.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/b6f2c.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/bb1ec.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/bb1ec.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/bb1ec.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/bb1ec.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/cd463.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/cd463.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/cd463.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/cd463.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/cf0d8.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/cf0d8.json/default/TopLevel.dart
index ea6fc77..5c56de9 100644
--- a/base/dart/test/inputs/json/misc/cf0d8.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/cf0d8.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -415,3 +415,11 @@ class Wind {
         "speed": speed,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/cfbce.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/cfbce.json/default/TopLevel.dart
index 53de3be..f7cd22a 100644
--- a/base/dart/test/inputs/json/misc/cfbce.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/cfbce.json/default/TopLevel.dart
@@ -21,7 +21,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         base: json["base"],
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         rates: Map.from(json["rates"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "rates": Map.from(rates).map((k, v) => MapEntry<String, dynamic>(k, v)),
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/d0908.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/d0908.json/default/TopLevel.dart
index 2997551..0046ade 100644
--- a/base/dart/test/inputs/json/misc/d0908.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/d0908.json/default/TopLevel.dart
@@ -34,7 +34,7 @@ class TotalPopulation {
     });
 
     factory TotalPopulation.fromJson(Map<String, dynamic> json) => TotalPopulation(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         population: json["population"],
     );
 
@@ -43,3 +43,11 @@ class TotalPopulation {
         "population": population,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/d23d5.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/d23d5.json/default/TopLevel.dart
index fc0a910..55bea01 100644
--- a/base/dart/test/inputs/json/misc/d23d5.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/d23d5.json/default/TopLevel.dart
@@ -77,10 +77,10 @@ class Result {
 
     factory Result.fromJson(Map<String, dynamic> json) => Result(
         acronym: (json.containsKey("acronym") ? json["acronym"] : throw FormatException('Missing required property')),
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         id: json["id"],
         name: json["name"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         uri: json["uri"],
     );
 
@@ -93,3 +93,11 @@ class Result {
         "uri": uri,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/dbfb3.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/dbfb3.json/default/TopLevel.dart
index 157027f..9a6fe2e 100644
--- a/base/dart/test/inputs/json/misc/dbfb3.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/dbfb3.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -437,3 +437,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/dc44f.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/dc44f.json/default/TopLevel.dart
index d67ad5c..54f324b 100644
--- a/base/dart/test/inputs/json/misc/dc44f.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/dc44f.json/default/TopLevel.dart
@@ -45,7 +45,7 @@ class TopLevel {
         mkmId: json["mkm_id"],
         mkmName: json["mkm_name"],
         name: json["name"],
-        releaseDate: DateTime.parse(json["releaseDate"]),
+        releaseDate: _parseDateTime(json["releaseDate"]),
         type: json["type"],
     );
 
@@ -358,7 +358,7 @@ class Ruling {
     });
 
     factory Ruling.fromJson(Map<String, dynamic> json) => Ruling(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         text: json["text"],
     );
 
@@ -405,3 +405,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/dd1ce.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/dd1ce.json/default/TopLevel.dart
index d67ad5c..54f324b 100644
--- a/base/dart/test/inputs/json/misc/dd1ce.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/dd1ce.json/default/TopLevel.dart
@@ -45,7 +45,7 @@ class TopLevel {
         mkmId: json["mkm_id"],
         mkmName: json["mkm_name"],
         name: json["name"],
-        releaseDate: DateTime.parse(json["releaseDate"]),
+        releaseDate: _parseDateTime(json["releaseDate"]),
         type: json["type"],
     );
 
@@ -358,7 +358,7 @@ class Ruling {
     });
 
     factory Ruling.fromJson(Map<String, dynamic> json) => Ruling(
-        date: DateTime.parse(json["date"]),
+        date: _parseDateTime(json["date"]),
         text: json["text"],
     );
 
@@ -405,3 +405,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/df957.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/df957.json/default/TopLevel.dart
index ea6fc77..5c56de9 100644
--- a/base/dart/test/inputs/json/misc/df957.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/df957.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -415,3 +415,11 @@ class Wind {
         "speed": speed,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/misc/e2915.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/e2915.json/default/TopLevel.dart
index d1d3b2a..1104f34 100644
--- a/base/dart/test/inputs/json/misc/e2915.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/e2915.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Query {
 
     factory Query.fromJson(Map<String, dynamic> json) => Query(
         count: json["count"],
-        created: DateTime.parse(json["created"]),
+        created: _parseDateTime(json["created"]),
         lang: json["lang"],
         results: Results.fromJson(json["results"]),
     );
@@ -435,3 +435,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/priority/bug2590.json/default/TopLevel.dart b/head/dart/test/inputs/json/priority/bug2590.json/default/TopLevel.dart
index c7bdea7..6047f88 100644
--- a/base/dart/test/inputs/json/priority/bug2590.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/priority/bug2590.json/default/TopLevel.dart
@@ -36,8 +36,8 @@ class Invoice {
     });
 
     factory Invoice.fromJson(Map<String, dynamic> json) => Invoice(
-        createdAt: (json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property'))),
-        dueDate: (json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property'))),
+        createdAt: (json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("createdAt") ? json["createdAt"] : throw FormatException('Missing required property'))),
+        dueDate: (json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("dueDate") ? json["dueDate"] : throw FormatException('Missing required property'))),
         name: json["name"],
     );
 
@@ -47,3 +47,11 @@ class Invoice {
         "name": name,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/priority/bug2663.json/default/TopLevel.dart b/head/dart/test/inputs/json/priority/bug2663.json/default/TopLevel.dart
index d7ff528..c1d97d1 100644
--- a/base/dart/test/inputs/json/priority/bug2663.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/priority/bug2663.json/default/TopLevel.dart
@@ -20,8 +20,8 @@ class TopLevel {
     });
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
-        birthday: DateTime.parse(json["birthday"]),
-        lastSeen: DateTime.parse(json["lastSeen"]),
+        birthday: _parseDateTime(json["birthday"]),
+        lastSeen: _parseDateTime(json["lastSeen"]),
         name: json["name"],
     );
 
@@ -31,3 +31,11 @@ class TopLevel {
         "name": name,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart b/head/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
index c5f7f58..4f6752b 100644
--- a/base/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
@@ -1688,7 +1688,7 @@ class DateTimeClass {
     });
 
     factory DateTimeClass.fromJson(Map<String, dynamic> json) => DateTimeClass(
-        dateTime: DateTime.parse(json["DateTime"]),
+        dateTime: _parseDateTime(json["DateTime"]),
     );
 
     Map<String, dynamic> toJson() => {
@@ -6805,3 +6805,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/samples/github-events.json/default/TopLevel.dart b/head/dart/test/inputs/json/samples/github-events.json/default/TopLevel.dart
index 36e1339..8c6dda3 100644
--- a/base/dart/test/inputs/json/samples/github-events.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/samples/github-events.json/default/TopLevel.dart
@@ -31,7 +31,7 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         actor: Actor.fromJson(json["actor"]),
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         id: json["id"],
         org: json["org"] == null ? null : Actor.fromJson(json["org"]),
         payload: Payload.fromJson(json["payload"]),
@@ -187,11 +187,11 @@ class Comment {
 
     factory Comment.fromJson(Map<String, dynamic> json) => Comment(
         body: json["body"],
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         htmlUrl: json["html_url"],
         id: json["id"],
         issueUrl: json["issue_url"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         url: json["url"],
         user: User.fromJson(json["user"]),
     );
@@ -403,10 +403,10 @@ class Issue {
         assignee: (json.containsKey("assignee") ? json["assignee"] : throw FormatException('Missing required property')),
         assignees: List<dynamic>.from(json["assignees"].map((x) => x)),
         body: json["body"],
-        closedAt: (json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property'))),
+        closedAt: (json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property'))),
         comments: json["comments"],
         commentsUrl: json["comments_url"],
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         eventsUrl: json["events_url"],
         htmlUrl: json["html_url"],
         id: json["id"],
@@ -419,7 +419,7 @@ class Issue {
         repositoryUrl: json["repository_url"],
         state: json["state"],
         title: json["title"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         url: json["url"],
         user: User.fromJson(json["user"]),
     );
@@ -520,10 +520,10 @@ class Milestone {
     factory Milestone.fromJson(Map<String, dynamic> json) => Milestone(
         closedAt: (json.containsKey("closed_at") ? json["closed_at"] : throw FormatException('Missing required property')),
         closedIssues: json["closed_issues"],
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         creator: User.fromJson(json["creator"]),
         description: json["description"],
-        dueOn: (json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property')) == null ? null : DateTime.parse((json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property'))),
+        dueOn: (json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property')) == null ? null : _parseDateTime((json.containsKey("due_on") ? json["due_on"] : throw FormatException('Missing required property'))),
         htmlUrl: json["html_url"],
         id: json["id"],
         labelsUrl: json["labels_url"],
@@ -531,7 +531,7 @@ class Milestone {
         openIssues: json["open_issues"],
         state: json["state"],
         title: json["title"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         url: json["url"],
     );
 
@@ -676,12 +676,12 @@ class PayloadPullRequest {
         base: Base.fromJson(json["base"]),
         body: json["body"],
         changedFiles: json["changed_files"],
-        closedAt: DateTime.parse(json["closed_at"]),
+        closedAt: _parseDateTime(json["closed_at"]),
         comments: json["comments"],
         commentsUrl: json["comments_url"],
         commits: json["commits"],
         commitsUrl: json["commits_url"],
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         deletions: json["deletions"],
         diffUrl: json["diff_url"],
         head: Base.fromJson(json["head"]),
@@ -695,7 +695,7 @@ class PayloadPullRequest {
         mergeable: (json.containsKey("mergeable") ? json["mergeable"] : throw FormatException('Missing required property')),
         mergeableState: json["mergeable_state"],
         merged: json["merged"],
-        mergedAt: DateTime.parse(json["merged_at"]),
+        mergedAt: _parseDateTime(json["merged_at"]),
         mergedBy: User.fromJson(json["merged_by"]),
         milestone: (json.containsKey("milestone") ? json["milestone"] : throw FormatException('Missing required property')),
         number: json["number"],
@@ -708,7 +708,7 @@ class PayloadPullRequest {
         state: json["state"],
         statusesUrl: json["statuses_url"],
         title: json["title"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         url: json["url"],
         user: User.fromJson(json["user"]),
     );
@@ -945,7 +945,7 @@ class BaseRepo {
         compareUrl: json["compare_url"],
         contentsUrl: json["contents_url"],
         contributorsUrl: json["contributors_url"],
-        createdAt: DateTime.parse(json["created_at"]),
+        createdAt: _parseDateTime(json["created_at"]),
         defaultBranch: json["default_branch"],
         deploymentsUrl: json["deployments_url"],
         description: json["description"],
@@ -986,7 +986,7 @@ class BaseRepo {
         owner: User.fromJson(json["owner"]),
         private: json["private"],
         pullsUrl: json["pulls_url"],
-        pushedAt: DateTime.parse(json["pushed_at"]),
+        pushedAt: _parseDateTime(json["pushed_at"]),
         releasesUrl: json["releases_url"],
         size: json["size"],
         sshUrl: json["ssh_url"],
@@ -999,7 +999,7 @@ class BaseRepo {
         tagsUrl: json["tags_url"],
         teamsUrl: json["teams_url"],
         treesUrl: json["trees_url"],
-        updatedAt: DateTime.parse(json["updated_at"]),
+        updatedAt: _parseDateTime(json["updated_at"]),
         url: json["url"],
         watchers: json["watchers"],
         watchersCount: json["watchers_count"],
@@ -1173,3 +1173,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/samples/null-safe.json/default/TopLevel.dart b/head/dart/test/inputs/json/samples/null-safe.json/default/TopLevel.dart
index 2a0496c..5324dab 100644
--- a/base/dart/test/inputs/json/samples/null-safe.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/samples/null-safe.json/default/TopLevel.dart
@@ -39,7 +39,7 @@ class Item {
 
     factory Item.fromJson(Map<String, dynamic> json) => Item(
         address: json["address"] == null ? null : Address.fromJson(json["address"]),
-        createdAt: json["created_at"] == null ? null : DateTime.parse(json["created_at"]),
+        createdAt: json["created_at"] == null ? null : _parseDateTime(json["created_at"]),
         name: json["name"],
         sex: (json.containsKey("sex") ? json["sex"] : throw FormatException('Missing required property')),
     );
@@ -75,3 +75,11 @@ class Address {
         "street": street,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/dart/test/inputs/json/samples/us-senators.json/default/TopLevel.dart b/head/dart/test/inputs/json/samples/us-senators.json/default/TopLevel.dart
index 2457ce0..8c1f73d 100644
--- a/base/dart/test/inputs/json/samples/us-senators.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/samples/us-senators.json/default/TopLevel.dart
@@ -107,7 +107,7 @@ class Object {
         current: json["current"],
         description: json["description"],
         district: (json.containsKey("district") ? json["district"] : throw FormatException('Missing required property')),
-        enddate: DateTime.parse(json["enddate"]),
+        enddate: _parseDateTime(json["enddate"]),
         extra: Extra.fromJson(json["extra"]),
         leadershipTitle: (json.containsKey("leadership_title") ? json["leadership_title"] : throw FormatException('Missing required property')),
         party: partyValues.map[json["party"]]!,
@@ -119,7 +119,7 @@ class Object {
         senatorClassLabel: senatorClassLabelValues.map[json["senator_class_label"]]!,
         senatorRank: senatorRankValues.map[json["senator_rank"]]!,
         senatorRankLabel: senatorRankLabelValues.map[json["senator_rank_label"]]!,
-        startdate: DateTime.parse(json["startdate"]),
+        startdate: _parseDateTime(json["startdate"]),
         state: json["state"],
         title: titleValues.map[json["title"]]!,
         titleLong: roleTypeLabelValues.map[json["title_long"]]!,
@@ -237,7 +237,7 @@ class Person {
 
     factory Person.fromJson(Map<String, dynamic> json) => Person(
         bioguideid: json["bioguideid"],
-        birthday: DateTime.parse(json["birthday"]),
+        birthday: _parseDateTime(json["birthday"]),
         cspanid: json["cspanid"],
         firstname: json["firstname"],
         gender: genderValues.map[json["gender"]]!,
@@ -387,3 +387,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/schema-dart/test/inputs/schema/date-time.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/date-time.schema/default/TopLevel.dart
index c9e211f..2ee0c5c 100644
--- a/base/schema-dart/test/inputs/schema/date-time.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/date-time.schema/default/TopLevel.dart
@@ -25,8 +25,8 @@ class TopLevel {
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         complexUnionArray: List<dynamic>.from(json["complex-union-array"].map((x) => x)),
-        date: DateTime.parse(json["date"]),
-        dateTime: DateTime.parse(json["date-time"]),
+        date: _parseDateTime(json["date"]),
+        dateTime: _parseDateTime(json["date-time"]),
         time: json["time"],
         unionArray: List<String>.from(json["union-array"].map((x) => x)),
     );
@@ -61,3 +61,11 @@ class EnumValues<T> {
             return reverseMap;
     }
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
diff --git a/base/schema-dart/test/inputs/schema/optional-date-time.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/optional-date-time.schema/default/TopLevel.dart
index 57bb775..b4fd5c2 100644
--- a/base/schema-dart/test/inputs/schema/optional-date-time.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/optional-date-time.schema/default/TopLevel.dart
@@ -26,11 +26,11 @@ class TopLevel {
     });
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
-        optionalDate: json["optional-date"] == null ? null : DateTime.parse(json["optional-date"]),
-        optionalDateTime: json["optional-date-time"] == null ? null : DateTime.parse(json["optional-date-time"]),
+        optionalDate: json["optional-date"] == null ? null : _parseDateTime(json["optional-date"]),
+        optionalDateTime: json["optional-date-time"] == null ? null : _parseDateTime(json["optional-date-time"]),
         optionalTime: json["optional-time"],
-        requiredDate: DateTime.parse(json["required-date"]),
-        requiredDateTime: DateTime.parse(json["required-date-time"]),
+        requiredDate: _parseDateTime(json["required-date"]),
+        requiredDateTime: _parseDateTime(json["required-date-time"]),
         requiredTime: json["required-time"],
     );
 
@@ -43,3 +43,11 @@ class TopLevel {
         "required-time": requiredTime,
     };
 }
+
+DateTime _parseDateTime(String value) {
+    final date = value.substring(0, 10);
+    if (!DateTime.parse(date + 'T00:00:00Z').toIso8601String().startsWith(date)) {
+        throw FormatException('Invalid date-time', value);
+    }
+    return DateTime.parse(value.toUpperCase());
+}
