提问人:Massau 提问时间:6/19/2023 更新时间:6/19/2023 访问量:28
Flutter - 防止无效的数据转换默认行为
Flutter - Prevent invalid data conversion default behavior
问:
我想检查用户以 DateTime 格式输入的日期是否有效,如果有效则进行转换,如果无效则显示异常
问题是 Dart 内部已经为我将该日期转换为有效日期,例如
9 月只有 30 天,下面的测试返回 false,因为 dart 将日期 09/31/2023 转换为 10/01/2023,这是一个有效日期
expect(format.validDateTime(DateTime(2023, 9, 31)), false); // the test was supposed to return false, but it returns true
有没有办法防止这种 Dart 转换行为并保留用户输入的日期?
答:
0赞
nvoigt
6/19/2023
#1
如果要自己分析它,则可以在将文本转换为 DateTime 之前获取文本。
或者,使用您认为最有用的任何格式:parseStrict
import 'package:intl/intl.dart';
void main() {
final moment = DateFormat('yyyy-MM-dd').parseStrict("2023-02-31");
print(moment);
}
当您尝试时,这确实会引发异常:
未捕获的错误:FormatException:解析 2023-02-31 时出错,无效的日期值:31 in en_US,时区偏移量为 1:00:00.000000。
然而,你不能做的是说“2023-02-31”。因为它不会在内部以这种方式保存它。它保存了 1970 年某个时间点的毫秒数,因此无论您传递什么,一旦从这些毫秒转换为天和月,它将永远是一个有效的日期。DateTime
评论