Dart 如何在flatter中将字符串转换为TimeOfDay?

Dart 如何在flatter中将字符串转换为TimeOfDay?,dart,flutter,Dart,Flutter,我有一个字符串,比如说'16:00',我想把它转换成TimeOfDay类型。 我查看了文档,它只提供了从DateTime到TimeOfDay的conversor,但我找不到从字符串到TimeOfDay的转换方法。您可以这样做: TimeOfDay time = TimeOfDay(hour: s.split(":")[0], minute: s.split(":")[1]); TimeOfDay stringToTimeOfDay(String tod) { final format =

我有一个字符串,比如说'16:00',我想把它转换成TimeOfDay类型。
我查看了文档,它只提供了从DateTime到TimeOfDay的conversor,但我找不到从字符串到TimeOfDay的转换方法。

您可以这样做:

TimeOfDay time = TimeOfDay(hour: s.split(":")[0], minute: s.split(":")[1]);
TimeOfDay stringToTimeOfDay(String tod) {
  final format = DateFormat.jm(); //"6:00 AM"
  return TimeOfDay.fromDateTime(format.parse(tod));
}
s
是要转换的字符串。

试试这个

TimeOfDay _startTime = TimeOfDay(hour:int.parse(s.split(":")[0]),minute: int.parse(s.split(":")[1]));
这对我很有用。

像这样:

TimeOfDay time = TimeOfDay(hour: s.split(":")[0], minute: s.split(":")[1]);
TimeOfDay stringToTimeOfDay(String tod) {
  final format = DateFormat.jm(); //"6:00 AM"
  return TimeOfDay.fromDateTime(format.parse(tod));
}

更新的解决方案2020年8月26日

我编写了一个
函数
将标准日期
字符串
的显示方式(例如上午7:04)转换为
时间

TimeOfDay timeConvert(String normTime) {
    int hour;
    int minute;
    String ampm = normTime.substring(normTime.length - 2);
    String result = normTime.substring(0, normTime.indexOf(' '));
    if (ampm == 'AM' && int.parse(result.split(":")[1]) != 12) {
      hour = int.parse(result.split(':')[0]);
      if (hour == 12) hour = 0;
      minute = int.parse(result.split(":")[1]);
    } else {
      hour = int.parse(result.split(':')[0]) - 12;
      if (hour <= 0) {
        hour = 24 + hour;
      }
      minute = int.parse(result.split(":")[1]);
    }
    return TimeOfDay(hour: hour, minute: minute);
  }
TimeOfDay时间转换(字符串normTime){
整小时;
整数分钟;
字符串ampm=normTime.substring(normTime.length-2);
字符串结果=normTime.substring(0,normTime.indexOf(“”));
if(ampm=='AM'&&int.parse(result.split(“:”[1])!=12){
hour=int.parse(result.split(“:”)[0]);
如果(小时=12)小时=0;
分钟=int.parse(result.split(“:”[1]);
}否则{
hour=int.parse(result.split(“:”)[0])-12;
如果(小时适用于上午/下午

TimeOfDay _time = TimeOfDay(hour:int.parse(string.split(":")[0]),minute: int.parse(string.split(":")[1].split(" ")[0]));

我在这里使用了一些答案,当AM和PM在字符串中时,它们不能正常工作。这是我的解决方案

TimeOfDay fromString(String time) {
  int hh = 0;
  if (time.endsWith('PM')) hh = 12;
  time = time.split(' ')[0];
  return TimeOfDay(
    hour: hh + int.parse(time.split(":")[0]) % 24, // in case of a bad time format entered manually by the user
    minute: int.parse(time.split(":")[1]) % 60,
  );
}

对于新手或初学者来说,这似乎很忙,但您可以轻松地将字符串转换为
DateTime
,然后将
DateTime
转换为
TimeOfDay

TimeOfDay timeConvert(String normTime) {
    int hour;
    int minute;
    String ampm = normTime.substring(normTime.length - 2);
    String result = normTime.substring(0, normTime.indexOf(' '));
    if (ampm == 'AM' && int.parse(result.split(":")[1]) != 12) {
      hour = int.parse(result.split(':')[0]);
      if (hour == 12) hour = 0;
      minute = int.parse(result.split(":")[1]);
    } else {
      hour = int.parse(result.split(':')[0]) - 12;
      if (hour <= 0) {
        hour = 24 + hour;
      }
      minute = int.parse(result.split(":")[1]);
    }
    return TimeOfDay(hour: hour, minute: minute);
  }

按照以下步骤进行无缝转换,而不会造成任何混乱:

  • 将此包添加到
    pubspec.yaml
  • 将任何日期字符串转换为有效的DateTime对象需要此包。 2.将日期字符串转换为
    DateTime
    对象,如下所示:

    DateTime DateTime=DateFormat(“h:mm a”).parse(placement.startTime);

    TimeOfDay-TimeOfDay=TimeOfDay.fromDate(dateTime)


    好了。但是别忘了相应地更改您的
    日期格式
    字符串。对我来说,我的日期字符串是
    4:30 AM
    ,所以我的
    日期格式
    字符串是
    “h:mm a”
    。根据需要更改
    DateFormat
    字符串。对于
    DateFormat
    字符串引用,请遵循此

    这是正确的,没有考虑转换。这在本地化字符串时不起作用。例如,9:00 AM什么是“DateFormat”?在本例中是一种解析器格式,用于告诉“TimeOfDay”应如何解析传入数据