parseXsDateTime static method
Implementation
static int parseXsDateTime(String value) {
const String pattern =
r'(\d\d\d\d)\-(\d\d)\-(\d\d)[Tt](\d\d):(\d\d):(\d\d)([\.,](\d+))?([Zz]|((\+|\-)(\d?\d):?(\d\d)))?';
final List<Match> matchList = RegExp(pattern).allMatches(value).toList();
if (matchList.isEmpty) {
throw ParserException('Invalid date/time format: $value');
}
final Match match = matchList[0];
int timezoneShift;
if (match.group(9) == null) {
// No time zone specified.
timezoneShift = 0;
} else if (match.group(9) == 'Z' || match.group(9) == 'z') {
timezoneShift = 0;
} else {
timezoneShift = int.parse(match.group(12)!) * 60 + int.parse(match.group(13)!);
if ('-' == match.group(11)) {
timezoneShift *= -1;
}
}
final DateTime dateTime = DateTime.utc(
int.parse(match.group(1)!),
int.parse(match.group(2)!),
int.parse(match.group(3)!),
int.parse(match.group(4)!),
int.parse(match.group(5)!),
int.parse(match.group(6)!),
);
int time = dateTime.millisecondsSinceEpoch;
if (timezoneShift != 0) {
time -= timezoneShift * 60000;
}
return time;
}