我从 django 后端 api 获取字符串“enddate”,格式如下:
"enddate" : "2024-08-24T05:30:00+05:30"
我的目的是将其转换为我的flutter应用程序中的日期时间,格式如下:
dd/MM/yyyy i.e 24/08/2024
使用户更容易阅读。
根据我读过的几篇堆栈文章,我已经想到了以下函数,但我似乎无法以正确的方式使用 DateFormat 函数来输入日期。这是我尝试过的:
DateTime parseEndDate(String enddate) {
var inputFormat = DateFormat('yy/MM/dd');
var inputDate = inputFormat.parse(enddate.toString()); // <--yy/MM/dd format
var outputFormat = DateFormat('dd/MM/yyyy');
var outputDate = outputFormat.format(inputDate); // <-- dd/MM/yy format
return DateTime.parse(outputDate).toLocal();
}
编辑: 基于以下几个解决方案: 结果传入日期的 DateTime.parse() 给了我“无效格式”。
重写函数,使其将日期字符串解析为 DateTime 并返回所需格式的字符串
String parseEndDate(String enddate) {
var inputDate = DateTime.parse(enddate);
var outputFormat = DateFormat('dd/MM/yyyy');
return outputFormat.format(inputDate);
}
尝试下面的代码:
带包装 - intl
String withPackage(String enddate) {
var inputDate = DateTime.parse(enddate);
return DateFormat('dd/MM/yyyy').format(inputDate);
}
print('With Package - ${withPackage('2024-08-24T05:30:00+05:30')}');
不含包装
String withoutPackage(String date) {
DateTime parsedDate = DateTime.parse(date);
String day = parsedDate.day.toString().padLeft(2, '0');
String month = parsedDate.month.toString().padLeft(2, '0');
String year = parsedDate.year.toString();
return "$day/$month/$year"; // merge your expected format like dd/MM/yyyy
}
print('With out Package - ${withoutPackage('2024-08-24T05:30:00+05:30')}');
您的
parseEndDate
函数存在以下两个问题:
var inputFormat = DateFormat('yy/MM/dd');
不正确,因为 enddate
字符串的格式为 yyyy-MM-dd
。outputFormat
(dd/MM/yyyy
) 无法重复解析为 DateTime
对象。您可以编写以下字符串扩展函数来获取格式化的日期字符串或
DateTime
对象:
import 'package:intl/intl.dart';
extension DateParsing on String {
String toDateString({String format = 'dd/MM/yyyy'}) {
final inputDate = DateTime.parse(this);
return DateFormat(format).format(inputDate);
}
DateTime toDateObject() {
return DateTime.parse(this);
}
}
然后像这样使用它:
'2024-08-24T05:30:00+05:30'.toDateString(); //returns a formatted date string
'2024-08-24T05:30:00+05:30'.toDateObject(); //returns a DateTime object
//or you can also parse to a different format
'2024-08-24T05:30:00+05:30'.toDateString(format: 'dd-MM-yyyy');
您返回的日期时间采用 ISO 8601 格式,因此 Flutter 可以使用 DateTime.parse() 方法轻松将其解析为日期时间对象。此方法自动处理 ISO 8601 格式,包括时区偏移。
String dateTimeString = "2024-08-24T05:30:00+05:30";
DateTime dateTime = DateTime.parse(dateTimeString);