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

如何将字符串"TimeOfDay(00:00)"转换为TimeOfDay类型变量

看起来你的问题出在没先把括号里的时间部分单独提取出来——你现在直接按冒号拆分的话,左边得到的是TimeOfDay(00,这显然不是纯数字,所以int.parse才会抛出Invalid radix-10 number的错误。

下面给你两种可靠的解决思路,帮你把字符串转换成TimeOfDay实例:

解决方法

方法一:用正则表达式精准提取时间部分

如果你的字符串格式固定(总是TimeOfDay(HH:MM)的结构),正则表达式可以直接匹配出括号里的时间内容,非常高效:

String timeStr = "TimeOfDay(00:00)";
// 匹配括号内的任意内容
RegExp timeReg = RegExp(r'\((.*?)\)');
Match? matchResult = timeReg.firstMatch(timeStr);

if (matchResult != null) {
  String timePart = matchResult.group(1)!; // 得到"00:00"
  List<String> timeSegments = timePart.split(":");
  
  int hour = int.parse(timeSegments[0]);
  int minute = int.parse(timeSegments[1]);
  
  TimeOfDay targetTime = TimeOfDay(hour: hour, minute: minute);
  // 现在可以正常访问hour和minute属性了
  print("提取到的小时:${targetTime.hour},分钟:${targetTime.minute}");
}

方法二:通过字符串截取处理

如果能确保字符串前缀和后缀完全固定(开头是TimeOfDay(,结尾是)),也可以用更简单的字符串截取方式:

String timeStr = "TimeOfDay(00:00)";
// 去掉开头的固定前缀和结尾的括号
String timePart = timeStr.substring(
  "TimeOfDay(".length,
  timeStr.length - 1
);

List<String> timeSegments = timePart.split(":");
int hour = int.parse(timeSegments[0]);
int minute = int.parse(timeSegments[1]);

TimeOfDay targetTime = TimeOfDay(hour: hour, minute: minute);
print("提取到的小时:${targetTime.hour},分钟:${targetTime.minute}");

补充说明

两种方法的核心都是先把00:00这个纯时间字符串从原始内容里剥离出来,再拆分小时和分钟数值。如果你的字符串可能出现格式变动(比如带空格、前缀不同),正则表达式的方式会更健壮;如果格式完全固定,字符串截取的方式代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:16:27