如何在 Dart/Flutter 中检查 Textfield 中输入的日期是否有效?

Ris*_*waj 5 android dart flutter

我在 3 个文本字段中使用了日月和年,但没有一个 DateTime 属性或函数提供验证。

我已经使用 DateTime.parse(str) 来获取日期,但是如果月份字段输入的天数超过 12 天,它会将剩余的月份添加到年份中。

bool isDate(String str) {
  try {
    DateTime.parse(str);
    return true;
  } catch (e) {
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

我想如果有人在字符串中输入 '20053050' 是假的不是真的。但是这个函数总是返回真!!!

在此处输入图片说明

NaK*_*Kib 5

有一个简单的方法,您现在就可以尝试。这是tryParse方法。对于无效的日期格式,它只是返回 null。

if(DateTime.tryParse(timeString) != null){
  DateTime date = DateTime.parse(timeString);
}
Run Code Online (Sandbox Code Playgroud)


小智 5

使用parseStrict而不只是parse

 DateFormat format = DateFormat("dd.MM.yyyy");
 DateTime dayOfBirthDate = format.parseStrict(value); //33.08.2001 - is invalid, 31.13.2001 - is invalid too

 DateFormat format = DateFormat("dd.MM.yyyy");
 DateTime dayOfBirthDate = format.parse(value); //33.08.2001 - will change to 2.09.2001 (same with months)
Run Code Online (Sandbox Code Playgroud)


Pab*_*era 4

DateTime 构造函数允许无效范围似乎是一个问题:DateTime.parse 应该在无效日期上抛出错误...

解决方法如下:如何检查 DART 中是否存在给定日期?

你可以这样使用它:

bool isValidDate(String input) {
  try {
    final date = DateTime.parse(input);
    final originalFormatString = toOriginalFormatString(date);
    return input == originalFormatString;
  } catch(e) {
    return false;
  }
}

String toOriginalFormatString(DateTime dateTime) {
  final y = dateTime.year.toString().padLeft(4, '0');
  final m = dateTime.month.toString().padLeft(2, '0');
  final d = dateTime.day.toString().padLeft(2, '0');
  return "$y$m$d";
}
Run Code Online (Sandbox Code Playgroud)