以定义的格式将日期字符串转换为日期时间对象

问题描述 投票:0回答:4

我从 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() 给了我“无效格式”。

flutter dart dart-intl
4个回答
0
投票

重写函数,使其将日期字符串解析为 DateTime 并返回所需格式的字符串

String parseEndDate(String enddate) {
    var inputDate = DateTime.parse(enddate);
    var outputFormat = DateFormat('dd/MM/yyyy');
    return outputFormat.format(inputDate);
}

0
投票

尝试下面的代码:

带包装 - 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')}');

0
投票

您的

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');

0
投票

您返回的日期时间采用 ISO 8601 格式,因此 Flutter 可以使用 DateTime.parse() 方法轻松将其解析为日期时间对象。此方法自动处理 ISO 8601 格式,包括时区偏移。

String dateTimeString = "2024-08-24T05:30:00+05:30";
DateTime dateTime = DateTime.parse(dateTimeString);
© www.soinside.com 2019 - 2024. All rights reserved.