尝试从位置 17 的 DATE HOUR 读取 DateTime 抛出错误

Trying to read from DATE HOUR at position 17 DateTime throwing error

我有两个 DateTimePicker,我想给它们设置上午和下午,这只是 DateTimePicker 之一。

        DateTimePicker(
          type: DateTimePickerType.dateTimeSeparate,
          dateMask: 'd MMM, yyyy a',
          initialValue: "Enter Boarding date",
          firstDate: DateTime(2000),
          lastDate: DateTime(2100),
          icon: Icon(Icons.event),
          dateLabelText: 'Date',
          timeLabelText: "Hour",
          locale: Locale('am', 'ET'),
          use24HourFormat: false,
          onChanged: (val) {
            _boardingDate.text = val;
          },
          validator: (val) {
            print(val);
            return null;
          },
          onSaved: (val) => print(val),
        ),

  TextEditingController _boardingDate = TextEditingController();

我想把它转换成类似

的值
YEAR-MONTH-DATE HOUR:MINUTE AM/PM

这就是我转换它的方式..我不知道我是否正确。

DateFormat inputFormat = DateFormat('yyyy-MM-dd hh:mm a');
String _arrival = inputFormat.parse(_arrivalDate.text).toString();
String _boarding = inputFormat.parse(_boardingDate.text).toString();

那么它不想分配 AM/PM。当我从 inputFormat 变量中删除最后一个 a 时,它起作用了。但是当它在那里时它会抛出这个错误

The following FormatException was thrown while handling a gesture:
Trying to read from 2021-09-25 04:20 at position 17

我使用 node.js 作为接受日期时间的后端。

试试这个, 将其转换为 DataTime,然后格式化为 String

DateTime _arrivalDatetime = DateTime.parse(_arrivalDate.text);
String _arrival = DateFormat("yyyy-MM-dd hh:mm a").format(_arrivalDatetime);
DateTime _boardingDatetime = DateTime.parse(_boardingDate.text);
String _boarding = DateFormat("yyyy-MM-dd hh:mm a").format(_boardingDatetime);

或者

  String dataTimeTextFormater(String text) {
    String formatedText = '';
    DateTime datetime = DateTime.parse(text);
    formatedText = DateFormat("yyyy-MM-dd hh:mm a").format(datetime);
    return formatedText;
  }

String _arrival = dataTimeTextFormater(_arrivalDate.text);
String _boarding = dataTimeTextFormater(_boardingDate.text);

我在 dartpad 中尝试并且有输出,它应该可以工作

我想你说过

registers the time only

我猜你有一个 textfield_boardingDateDateTimePicker 选择日期但格式错误, 您对其进行了格式化,但 UI 尚未更新。 你可以把 onchange 改成

onChanged: (val) {
    _boardingDate.text = dataTimeTextFormater(val);
},