【问题标题】:Flutter check if DateTime actually existsFlutter 检查 DateTime 是否确实存在
【发布时间】:2021-09-03 11:42:37
【问题描述】:

在我的应用中,用户可以添加DateTime。为此,我没有使用简单的DatePicker,而是使用了一些自定义的东西,我每天和每月(dd,mm)得到两个Strings。我现在的问题是我需要验证这个输入。而且我尝试了几件事,但无法获得一个好的工作解决方案!

  DateTime getDateTime(BuildContext context) {
    return DateTime(2021, (m1! * 10 + m2!), (d1! * 10 + d2!));
  }

这是我尝试过的。问题是用户还可以为 m1、m2、d1 和 d2 和DateTime 提供任何东西(任何int),只需将其格式化为常规日期时间。

有没有办法检查过去的给定日期时间是否存在?

德语格式

01.05。 -> 是的

00.05。 -> 错误

51.05。 -> 错误

31.02。 -> 错误

15.10。 > 真的

【问题讨论】:

    标签: flutter datetime dart datetime-format


    【解决方案1】:

    我在 DateFormat 中使用 'parseStrict' 方法实现。

    “parseStrict”抛出异常与实际日期不匹配。

    bool isValidDate({y = 2021, m1, m2, d1, d2}) {
        DateFormat format = DateFormat('yyyy/M/d');
        try {
          String md = '$y/${m1 * 10 + m2}/${d1 * 10 + d2}';
          format.parseStrict(md);
          return true;
        } catch (error) {
          return false;
        }
    }
    

    用法

    isValidDate(m1: 1, m2: 1, d1: 3, d2: 0);
    

    【讨论】:

    • praseStrict 正是我所需要的。谢谢:)
    【解决方案2】:

    我们可以通过其他方式检查...

    static bool isDate(String dt) {
        try {
          final date = DateTime.parse(dt);
          final y = date.year.toString().padLeft(4, '0');
          final m = date.month.toString().padLeft(2, '0');
          final d = date.day.toString().padLeft(2, '0');
          final newDt = "$y-$m-$d";
          return dt == newDt;
        } catch (e) {
          return false;
        }
      }
      
      if(isDate('2021-02-04){
        //Yes Correct
      } else {
        //Not Correct
      }

    感谢https://stackoverflow.com/users/1246063/mikhail-ponkin

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 2017-04-01
      • 2013-07-29
      • 2021-09-15
      • 2018-12-09
      • 2021-06-15
      相关资源
      最近更新 更多