首页 > 解决方案 > 尝试从位置 17 的日期时间读取日期时间抛出错误

问题描述

我有两个DateTimePicker,我想为它们设置 AM 和 PM,这只是其中之一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。当我ainputFormat变量中删除最后一个时,它起作用了。但是当它在那里时会抛出这个错误

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

我使用 node.js 作为后端来接受 dateTime。

标签: node.jsflutterdatetimedartdatetimepicker

解决方案


试试这个,将其转换为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中尝试并且有输出,它应该可以工作 在此处输入图像描述

我想你说

只记录时间

我猜你有一个textfieldwith _boardingDateDateTimePicker选择日期但格式错误,你格式化它但 UI 还没有更新。你可以改变onchange

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

推荐阅读