ISO 8601 date string inferred as String? instead of DateTime in Dart output
Issue Type
Quicktype output / Type inference issue
Context (Environment, Version, Language)
Input Format: JSON
Output Language: Dart
CLI, npm, or app.quicktype.io: app.quicktype.io / CLI
Version: Latest
Description
ISO 8601 formatted date-time strings (e.g., "2025-08-19T08:08:45.087") are currently being typed as optional String? rather than being detected as DateTime types in Dart code generation. Older versions of quicktype automatically recognized ISO date strings and generated DateTime.parse() / toIso8601String() methods.
Input Data
{
"LastRecorded": "2025-08-19T08:08:45.087"
}
Expected Behaviour / Output
ISO date-time strings should be inferred as DateTime (or DateTime? if nullability is enabled), producing parsing logic like:
import 'dart:convert';
Welcome welcomeFromJson(String str) => Welcome.fromJson(json.decode(str));
String welcomeToJson(Welcome data) => json.encode(data.toJson());
class Welcome {
DateTime lastRecorded;
Welcome({
required this.lastRecorded,
});
factory Welcome.fromJson(Map<String, dynamic> json) => Welcome(
lastRecorded: DateTime.parse(json["LastRecorded"]),
);
Map<String, dynamic> toJson() => {
"LastRecorded": lastRecorded.toIso8601String(),
};
}
Current Behaviour / Output
The field is treated as a generic nullable String?:
import 'dart:convert';
Temperatures temperaturesFromJson(String str) => Temperatures.fromJson(json.decode(str));
String temperaturesToJson(Temperatures data) => json.encode(data.toJson());
class Temperatures {
String? lastRecorded;
Temperatures({
this.lastRecorded,
});
factory Temperatures.fromJson(Map<String, dynamic> json) => Temperatures(
lastRecorded: json["LastRecorded"],
);
Map<String, dynamic> toJson() => {
"LastRecorded": lastRecorded,
};
}
Steps to Reproduce
- Open
app.quicktype.io (or run quicktype CLI).
- Set target language to Dart.
- Input JSON containing an ISO 8601 timestamp:
{"LastRecorded": "2025-08-19T08:08:45.087"}.
- Observe that
lastRecorded is generated as String? instead of DateTime.
Possible Solution
Ensure string format inference checks ISO 8601 patterns prior to defaulting to String for Dart generation, or verify that the "Detect dates & times" option setting is active in the Dart target options.
ISO 8601 date string inferred as
String?instead ofDateTimein Dart outputIssue Type
Quicktype output / Type inference issue
Context (Environment, Version, Language)
Input Format: JSON
Output Language: Dart
CLI, npm, or app.quicktype.io: app.quicktype.io / CLI
Version: Latest
Description
ISO 8601 formatted date-time strings (e.g.,
"2025-08-19T08:08:45.087") are currently being typed as optionalString?rather than being detected asDateTimetypes in Dart code generation. Older versions of quicktype automatically recognized ISO date strings and generatedDateTime.parse()/toIso8601String()methods.Input Data
{ "LastRecorded": "2025-08-19T08:08:45.087" }Expected Behaviour / Output
ISO date-time strings should be inferred as
DateTime(orDateTime?if nullability is enabled), producing parsing logic like:Current Behaviour / Output
The field is treated as a generic nullable
String?:Steps to Reproduce
app.quicktype.io(or runquicktypeCLI).{"LastRecorded": "2025-08-19T08:08:45.087"}.lastRecordedis generated asString?instead ofDateTime.Possible Solution
Ensure string format inference checks ISO 8601 patterns prior to defaulting to
Stringfor Dart generation, or verify that the "Detect dates & times" option setting is active in the Dart target options.