如何检查DART中是否存在给定的日期? [英] How to check if a given Date exists in DART?

查看:112
本文介绍了如何检查DART中是否存在给定的日期?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果您将不存在/不真实的日期(例如: 20181364(2018/13/64))传递到DateTime(构造函数或解析方法)中,则不会引发任何异常。而是返回计算出的DateTime。

If you pass a non-existing/non-real date like: '20181364' (2018/13/64) into DateTime (constructor or parse-method), no exception is thrown. Instead a calculated DateTime is returned.

示例:
'20181364'-> 2019-03-05 00:00:00.000

Example: '20181364' --> 2019-03-05 00:00:00.000

如何检查给定日期是否确实存在/有效?

How can I check if a given date really exists/is valid?

我尝试使用DartPad解决此问题(未成功),

I tried to solve this using DartPad (without success), so no Flutter doctor output required here.

void main() {
  var inputs = ['20180101', // -> 2018-01-01 00:00:00.000
                '20181231', // -> 2018-12-31 00:00:00.000
                '20180230', // -> 2018-03-02 00:00:00.000
                '20181301', // -> 2019-01-01 00:00:00.000
                '20181364'];// -> 2019-03-05 00:00:00.000

  inputs.forEach((input) => print(convertToDate(input)));
}

String convertToDate(String input){
  return DateTime.parse(input).toString();
}

如果有某种方法可以检查给定值日期确实存在/有效,例如:

It would be great if there exist some kind of method to check if a given date really exists/is valid, e.g.:


  • DateTime中的validate函数

  • 另一个lib不使用DateTime.parse()进行验证

您将如何解决?

推荐答案

您可以将解析后的日期转换为原始格式的字符串,然后比较其是否与输入匹配。

You can convert parsed date to string with original format and then compare if it's matching the input.

void main() {
  var inputs = ['20180101', // -> 2018-01-01 00:00:00.000
                '20181231', // -> 2018-12-31 00:00:00.000
                '20180230', // -> 2018-03-02 00:00:00.000
                '20181301', // -> 2019-01-01 00:00:00.000
                '20181364'];// -> 2019-03-05 00:00:00.000

  inputs.forEach((input) {
    print("$input is valid string: ${isValidDate(input)}");
  });
}

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

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";
}

这篇关于如何检查DART中是否存在给定的日期?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆