提问人:Alpit Panchal 提问时间:11/10/2023 最后编辑:jamesdlinAlpit Panchal 更新时间:11/11/2023 访问量:71
DateFormat.parse 无法解析看起来正常的日期/时间
DateFormat.parse fails to parse dates/times that look fine
问:
我在将字符串转换为 时遇到了问题。它以前有效,但现在我遇到了这个问题。TimeOfDay
try {
final format = DateFormat.jm(); //"6:00 AM"
TimeOfDay day = TimeOfDay.fromDateTime(format.parse("6:00"));
} catch(ex) {
PLPrint(name: "CheckTest",value: "${ex.toString()}");
}
我已经尝试了解析字符串的格式:
1:6:00 - FormatException:尝试从 6:00 到 5 点读取
2:上午 6:00 - FormatException:尝试从早上 6:00 到 5 点阅读
3:6:00:00 - FormatException:尝试从 6:00:00 到 5 读取
4:上午 6:00:00 - FormatException:尝试从上午 6:00:00 到 5 点阅读
5:16:00 - FormatException:尝试从 16:00 到 6 点读取
6:16:00:00 - FormatException:尝试从 16:00:00 读取 6
我已经尝试了几乎所有格式,但仍然遇到格式问题。
答:
骨架使用依赖于区域设置的格式,因此可能会有所不同。在默认语言环境(我认为默认为美国英语语言环境)中,该格式包括一个 AM/PM 标记,截至 2023 年,该标记现在用 Unicode 不间断空格(特别是 U+202F)分隔:DateFormat
jm
import 'package:intl/intl.dart';
void main() {
var format = DateFormat.jm();
var s1 = format.format(DateTime(2023, 1, 1, 6));
var s2 = "6:00 AM";
print(s1); // Prints: 6:00 AM
print(s1 == s2); // Prints: false
print(s1.runes); // Prints: (54, 58, 48, 48, 8239, 65, 77)
print(s2.runes); // Prints: (54, 58, 48, 48, 32, 65, 77)
}
如果要接受其他类型的空格,请使用 DateFormat.parseLoose
而不是:jm
DateFormat.parse
如果被 接受,则返回结果。如果没有,请尝试解析它,但接受大写或小写,允许缺少分隔符并替换或补充空格,并在允许空格的地方允许任意数量的空格。请注意,这不允许尾随字符,方式允许。
inputString
parseStrict
parse
import 'package:intl/intl.dart';
void main() {
var format = DateFormat.jm();
print(format.parseLoose("6:00 AM")); // Prints: 1970-01-01 06:00:00.000
}
从经验测试来看,使用 non-break 空格的更改似乎已被 0.18.1 所接受,因此您也可以考虑回滚到 0.18.0 作为另一种解决方法。package:intl
评论