Dart 日期格式不一致
Dart DateFormat inconsistency
我正在尝试解析看起来像这样的日期字符串 Feb0920221500
(月、月中的日、年、小时、分钟)。但是当我使用 MMMddyyyyHmm
模式时,我总是得到 FormatException
。此外,intl
的 DateFormat
无法解析回之前已格式化的日期:
import 'package:intl/intl.dart';
void main() {
final dateFormat = DateFormat("MMMddyyyyHmm");
final dateString = dateFormat.format(DateTime.now());
print(dateString);
final date = dateFormat.parse(dateString);
print(date);
}
输出:
Feb0920221511
Uncaught Error: FormatException: Trying to read yyyy from Feb0920221511 at position 13
我做错了什么?
您 运行 关注此问题:https://github.com/dart-lang/intl/issues/210
TL/DR:如果我对包维护者的理解正确的话,这两种方法都不是设计成完全可逆的。
尝试引入像 space 或点这样的字段分隔符作为解决方法:
final dateFormat = DateFormat("MMM dd yyyy H mm");
final dateString = dateFormat.format(DateTime.now());
print(dateString);
print(dateFormat.parseStdaterict(dateString));
如果无法更改给定日期字符串的格式,您仍然可以通过这样的 hack 使其工作。只要确保优雅地处理错误即可。
import 'package:intl/intl.dart';
Future<void> main() async {
final parsedDate = 'Feb0920221511'.parseToDate();
print(parsedDate.toIso8601String());
}
extension CustomDateParser on String {
DateTime parseToDate() {
try {
final month = substring(0, 3);
final day = substring(3, 5);
final year = substring(5, 9);
final hour = substring(9, 11);
final minute = substring(11, 13);
final paddedDateString = '$month $day $year $hour $minute';
final dateFormat = DateFormat('MMM dd yyyy H mm');
return dateFormat.parse(paddedDateString);
} catch (e) {
// handle error
print(e);
rethrow;
}
}
}
我正在尝试解析看起来像这样的日期字符串 Feb0920221500
(月、月中的日、年、小时、分钟)。但是当我使用 MMMddyyyyHmm
模式时,我总是得到 FormatException
。此外,intl
的 DateFormat
无法解析回之前已格式化的日期:
import 'package:intl/intl.dart';
void main() {
final dateFormat = DateFormat("MMMddyyyyHmm");
final dateString = dateFormat.format(DateTime.now());
print(dateString);
final date = dateFormat.parse(dateString);
print(date);
}
输出:
Feb0920221511
Uncaught Error: FormatException: Trying to read yyyy from Feb0920221511 at position 13
我做错了什么?
您 运行 关注此问题:https://github.com/dart-lang/intl/issues/210
TL/DR:如果我对包维护者的理解正确的话,这两种方法都不是设计成完全可逆的。
尝试引入像 space 或点这样的字段分隔符作为解决方法:
final dateFormat = DateFormat("MMM dd yyyy H mm");
final dateString = dateFormat.format(DateTime.now());
print(dateString);
print(dateFormat.parseStdaterict(dateString));
如果无法更改给定日期字符串的格式,您仍然可以通过这样的 hack 使其工作。只要确保优雅地处理错误即可。
import 'package:intl/intl.dart';
Future<void> main() async {
final parsedDate = 'Feb0920221511'.parseToDate();
print(parsedDate.toIso8601String());
}
extension CustomDateParser on String {
DateTime parseToDate() {
try {
final month = substring(0, 3);
final day = substring(3, 5);
final year = substring(5, 9);
final hour = substring(9, 11);
final minute = substring(11, 13);
final paddedDateString = '$month $day $year $hour $minute';
final dateFormat = DateFormat('MMM dd yyyy H mm');
return dateFormat.parse(paddedDateString);
} catch (e) {
// handle error
print(e);
rethrow;
}
}
}