You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DateTime.parse触发App崩溃:无效日期格式问题排查求助

问题原因与解决方案

核心问题:逻辑运算符误用

你的代码里判断条件错误使用了||(逻辑或),而非&&(逻辑与):

_variable = myString!=null||myString!="" ? DateTime.parse("$myString") : DateTime.now();

当myString是空字符串时,myString!=null为true,myString!=""为false,||只要任一条件为真就会执行DateTime.parse("$myString"),但空字符串属于非法日期格式,直接触发FormatException。

修复步骤

  1. 修正逻辑运算符,将||改为&&,确保仅当字符串非空且非null时才尝试解析:
_variable = myString != null && myString.isNotEmpty ? DateTime.parse(myString) : DateTime.now();

注:用myString.isNotEmpty替代myString!="",语义更清晰

  1. 额外增加异常捕获(可选但推荐)
    即使字符串非空,也可能存在格式不合法的情况(比如SharedPreferences中存入了不符合DateTime解析规则的内容),建议包裹try-catch避免崩溃:
void myfunction() async{
  SharedPreferences prefs = await SharedPreferences.getInstance();
  String myString = prefs.getString("key") ?? "";
  
  DateTime parsedDate;
  try {
    if (myString.isNotEmpty) {
      parsedDate = DateTime.parse(myString);
    }
  } catch (e) {
    // 解析失败时使用当前时间
    parsedDate = DateTime.now();
  }
  _variable = parsedDate ?? DateTime.now();
}

内容的提问来源于stack exchange,提问作者Nitneuq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:06:25