我有一个DateTime的实例,我想将其格式化为字符串。我怎么做呢?我想把日期转换成一个字符串,类似于“2013-04-20”。


当前回答

另一种方法,使用intl包。

创建DateTime的扩展:

date_time_extension.dart

import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';

extension DateTimeExtension on DateTime {
  String format([String pattern = 'dd/MM/yyyy', String? locale]) {
    if (locale != null && locale.isNotEmpty) {
      initializeDateFormatting(locale);
    }
    return DateFormat(pattern, locale).format(this);
  }
}

导入你要使用DateTime类型的文件,你可以这样使用它:

DateTime.now().format();

DateTime.now().format('MM/yyyy');

DateTime.now().format('MM/yyyy', 'es');

其他回答

import 'package:intl/intl.dart';

main() {
  var formattedDate = new DateTime.Format('yyyy-MM-dd').DateTime.now();
  print(formattedDate); // something like 2020-04-16
}

有关更多详细信息,请参阅DateFormat文档

您还可以像前面所述的那样指定日期格式:https://pub.dev/documentation/intl/latest/intl/DateFormat-class.html

import 'package:intl/intl.dart';
String formatDate(DateTime date) => new DateFormat("MMMM d").format(date);

出品时间:3月4日

处理年度季度,从字符串到日期时间,我没有找到合适的解决方案,所以做了这个:

    List<String> dateAsList = 'Q1 2001'.split(' ');
    DateTime dateTime = DateTime.now();
    String quarter = dateAsList[0];
    int year = int.parse(dateAsList[1]);
    switch(quarter) {
      case "Q1": dateTime = DateTime(year, 1);
      break;
      case "Q2": dateTime = DateTime(year, 4);
      break;
      case "Q3": dateTime = DateTime(year, 7);
      break;
      case "Q4": dateTime = DateTime(year, 10);
      break;
    }

main() {
  final String pattern = 'yyyy-MM-dd';
  final String formatted = DateFormat(pattern).format(DateTime.now());
  print(formatted);
}

更改yyyy-MM-dd字符串可以更改日期格式。我用这个模式字符串做了一个应用程序。

你可以在我的应用程序中实验字符串格式。 https://biplobsd.github.io/EpochConverterApp

在这里你可以看到我如何编辑模式和这个效果显示在顶部

如果你想将多个日期格式合并为一个,这就是我们使用intl的方法。

DateFormat('yMMMd').addPattern(DateFormat.HOUR24_MINUTE).format(yourDateTime))