我使用showDatePicker
在TextField
中获得数据输入。我将选择的数据转换为字符串,并使用intl格式将其解析为dd-mm-yy
格式。根据文档DateFormat('ymd')
是这样做的。但我得到错误FormatException: Trying to read m from 2022-06-04 00:00:00.000 at position 4
。什么是正确的方式转换成这种格式,为什么我得到这个错误。我引用的文档- https://api.flutter.dev/flutter/intl/DateFormat-class.html
TextField(
keyboardType: TextInputType.datetime,
controller: paidDateController,
onTap: () async {
DateTime? PickedDate = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(2010),
lastDate: DateTime(2026));
if (PickedDate != null) {
setState(() {
formatDate = PickedDate.toString();
paidDate = DateFormat('ymd').parse(formatDate);
print(paidDate);
});
} else {
Get.snackbar('Error', 'Pick paid date',
backgroundColor: Colors.red);
}
},
decoration:
kTextFieldDecocation.copyWith(hintText: 'Paid Date'),
),
formatDate
为字符串数据类型,paidDate
为日期时间数据类型。
嗯,我想你给这部分的格式
paidDate = DateFormat('ymd').parse(formatDate);
显示总是错误,因为如果你试图解析日期是由showDateTimePicker给出的格式将像2022-06-05 15:00:12
,这也如果你试图传递这个。这可能不会解析,因为DateFormat('yMd')
或DateFormat.yMd()
的读取模式日期类似于"05/06/2022"
所以你试着像这样
final formatDate1 = "2022-05-06";
final formForMatted = DateFormat('dd/MM/yyyy').format(DateTime.parse(formatDate1));
final paidDate1 = DateFormat.yMd().parse(formForMatted);
print(paidDate1); // as result 2022-06-05 00:00:00.000
但是如果你想要一个像5/6/2022这样的结果试试这个
final formatDate1 = "2022-05-06";
final paidDate1 = DateFormat.yMd().format(DateTime.parse(formatDate1));
print(paidDate1); // as result 5/6/2022