如何在 dart /扑翼中检查文本字段中输入的日期是否有效?

lstz6jyr  于 2023-01-10  发布在  其他
关注(0)|答案(5)|浏览(155)

我在3个文本字段中输入日、月和年,但没有一个DateTime属性或函数提供验证。
我已经使用DateTime.parse(str)来获取日期,但是如果月份字段中输入的天数超过12天,它会将剩余月份添加到年份中。

bool isDate(String str) {
  try {
    DateTime.parse(str);
    return true;
  } catch (e) {
    return false;
  }
}
  • 我想如果有人输入'20053050'的字符串是假不真。但这个函数总是返回真!!!*

68de4m5k

68de4m5k1#

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

if(DateTime.tryParse(timeString) != null){
  DateTime date = DateTime.parse(timeString);
}
kmb7vmvb

kmb7vmvb2#

使用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)
kmpatx3s

kmpatx3s3#

DateTime构造函数允许无效范围似乎是个问题:DateTime.parse should throw an error on invalid date...
解决方法如下:How to check if a given Date exists in 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";
}
hgtggwj0

hgtggwj04#

您可以尝试将日期收集为字符串(例如String _enteredDate),并将其转换为您想要的日期格式,使用DateFormat和您的格式设置首选项,并使用DateTime.parse解析字符串。例如:

_formattedDate = DateFormat('MM-dd-yyyy').format(DateTime.parse(_enteredDate))

如果用户输入无效的日期格式,应该会有一个错误,您可以捕捉和警报。

hm2xizp9

hm2xizp95#

bool isDate(String input, String format) {
  try {
    final DateTime d = DateFormat(format).parseStrict(input);
    //print(d);
    return true;
  } catch (e) {
    //print(e);
    return false;
  }
}

检查日期。

String inputDate = "2022-02-20"; 
if (isDate(inputDate, "yyyy-MM-dd")) {
    print("$inputDate Date Valid");
} else {
    print("$inputDate Date notValid");
}

“2022年2月20日”有效日期
“2022年2月30日”日期无效

Yann39 Answered from.

相关问题