当前位置: 首页 > 知识库问答 >
问题:

我们如何在Flutter/Dart中将自定义DateTime格式化为DateTime?

濮阳景天
2023-03-14

我希望我的日期时间总是保存为以下格式:yMMMd

即 2021 年 3 月 30 日

问题:

当我格式化我的日期时间时,它格式化为字符串。当我尝试将其解析回DateTime时,我收到错误并且没有成功。

我在寻找解决这个问题的好方法时遇到了问题。

这是可能的还是我必须满足于保存为字符串?

编辑

尝试了所有推荐的方法,也尝试了许多其他方法,但也不起作用。我想知道Intl包日期格式是否无法解析回DateTime?这可能是我的问题。有人吗?

请看我打印语句和错误,看看什么是成功的,什么不是。

我正在尝试的日期选择器:

  Future<void> _selectDate(BuildContext context) async {
    final DateTime picked = await showDatePicker(
        context: context,
        initialDate: DateTime.now(),
        firstDate: DateTime(2015, 8),
        lastDate: DateTime(2101));
    if (picked != null)
      setState(() {
        print('------ Picked date: $picked');
        var dateString = '';
        final formattedDate = DateFormat.yMMMd().format(picked);
        var parsedDate = DateTime.parse(formattedDate);           // Does not work...
        print('------- Parsed date: $parsedDate');
        dateString = formattedDate;
        print('------ String date: $dateString');
        expenseDate = formattedDate as DateTime;
        print('------ Formatted date: ${formattedDate.toString()}');
      });
  }

错误:

flutter: ------ Picked date: 2021-03-31 00:00:00.000
[VERBOSE-2:ui_dart_state.cc(186)] Unhandled Exception: FormatException: Invalid date format
Mar 31, 2021
#0      DateTime.parse (dart:core/date_time.dart:322:7)
#1      _AddExpenseButtonState._selectDate.<anonymous closure> (package:fp_provider_demo_one/widgets/add_expense_button.dart:48:35)
#2      State.setState (package:flutter/src/widgets/framework.dart:1267:30)
#3      _AddExpenseButtonState._selectDate (package:fp_provider_demo_one/widgets/add_expense_button.dart:44:7)
<asynchronous suspension>

共有2个答案

卫宁
2023-03-14

使用< code>parse方法从字符串中获取< code>DateTime。

final df = DateFormat.yMMMd();
final dateString = df.format(picked);

final expenseDate = df.parse(dateString);

https://pub.dev/documentation/intl/latest/intl/DateFormat/parse.html

柳翼
2023-03-14

因此,您希望格式化您的日期时间,并在以后将其解析回日期时间实例

试试Jiffy包,可能会有所帮助。见下文

从您的时间选择器中选择时间的示例

DateTime picked = DateTime(2021, 3, 21); // just a random datetime

要格式化,请尝试以下操作

final formattedDate = Jiffy(picked).yMMMd; // Mar 21, 2021

将其解析回日期时间

var parsedDate = Jiffy(formattedDate, "MMM dd, yyyy").dateTime; // 2021-03-21 00:00:00.000

Jiffy运行在Intl之上,你也可以用它做很多很酷的事情,试试吧

 类似资料:
  • 点击按钮后,我尝试在< code>Text小部件中显示当前的< code>DateTime。下面的作品,但我想改变格式。 目前的做法 结果 问题 如何删除部分?

  • 我有一个格式为“Mon May 31 2021 23:59:59 GMT 0000(协调世界时)”的日期,但需要将其转换为本地时区并解析为日期时间格式。我该怎么做?

  • 本文向大家介绍.NET Framework 格式:自定义DateTime格式,包括了.NET Framework 格式:自定义DateTime格式的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 在我的项目中,我使用HorizontalPicker第三方库来选择日期。然而,当我在文本视图中显示DateTime变量的值时,我很难改变它的格式。 我将如何格式化这是更容易为用户阅读的东西,如"10-5-2020" 代码:

  • 问题内容: 我有一个字符串“ ”,我想将其格式化为“ ”,正确的模式是什么? 我已经尝试了很多,并用谷歌搜索,但仍然找不到正确的模式。 编辑:我正在寻找Joda-Time ,而不是Java的SimpleDateFormat。 问题答案: 请注意,在JAVA SE 8中引入了新的java.time(JSR-310)包。 这代替了Joda时间,建议Joda用户进行迁移。有关JAVA SE≥8格式化日期