我有一个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');

其他回答

可以使用intl包格式化flutter中的日期。

void main() {
  final DateTime now = DateTime.now();
  final DateFormat format = DateFormat('yyyy-MM-dd');
  final String formatted = format.format(now);
  // 2021-03-02
}

或者可以使用date_format包来格式化flutter中的日期。

import 'package:date_format/date_format.dart';

final formattedStr = formatDate(DateTime.now(), [dd, '-', mm, '-', yyyy]);

//02-03-2021

您可以使用intl包(安装程序)格式化日期。

对于en_US格式,它非常简单:

import 'package:intl/intl.dart';

main() {
  final DateTime now = DateTime.now();
  final DateFormat formatter = DateFormat('yyyy-MM-dd');
  final String formatted = formatter.format(now);
  print(formatted); // something like 2013-04-20
}

有许多格式化选项。从文档中可以看出:

ICU Name                   Skeleton
--------                   --------
DAY                          d
ABBR_WEEKDAY                 E
WEEKDAY                      EEEE
ABBR_STANDALONE_MONTH        LLL
STANDALONE_MONTH             LLLL
NUM_MONTH                    M
NUM_MONTH_DAY                Md
NUM_MONTH_WEEKDAY_DAY        MEd
ABBR_MONTH                   MMM
ABBR_MONTH_DAY               MMMd
ABBR_MONTH_WEEKDAY_DAY       MMMEd
MONTH                        MMMM
MONTH_DAY                    MMMMd
MONTH_WEEKDAY_DAY            MMMMEEEEd
ABBR_QUARTER                 QQQ
QUARTER                      QQQQ
YEAR                         y
YEAR_NUM_MONTH               yM
YEAR_NUM_MONTH_DAY           yMd
YEAR_NUM_MONTH_WEEKDAY_DAY   yMEd
YEAR_ABBR_MONTH              yMMM
YEAR_ABBR_MONTH_DAY          yMMMd
YEAR_ABBR_MONTH_WEEKDAY_DAY  yMMMEd
YEAR_MONTH                   yMMMM
YEAR_MONTH_DAY               yMMMMd
YEAR_MONTH_WEEKDAY_DAY       yMMMMEEEEd
YEAR_ABBR_QUARTER            yQQQ
YEAR_QUARTER                 yQQQQ
HOUR24                       H
HOUR24_MINUTE                Hm
HOUR24_MINUTE_SECOND         Hms
HOUR                         j
HOUR_MINUTE                  jm
HOUR_MINUTE_SECOND           jms
HOUR_MINUTE_GENERIC_TZ       jmv
HOUR_MINUTE_TZ               jmz
HOUR_GENERIC_TZ              jv
HOUR_TZ                      jz
MINUTE                       m
MINUTE_SECOND                ms
SECOND                       s

对于非en_us日期,需要显式地加载语言环境。更多信息请参阅DateFormat文档。date_symbol_data_local。Dart包含每个国家/语言的所有格式,如果您想更深入地了解的话。

要获得一个用户友好的字符串,包括日期和时间,你可以使用这个:

import 'package:intl/intl.dart';

main() {
  final DateTime someDateTime = DateTime(2017, 9, 7, 17, 30);
  final DateFormat formatter = DateFormat.yMMMd().add_jms();
  final String formatted = formatter.format(someDateTime);
  print(formatted); // Sep 7, 2017 5:30:00 PM (in the US)
}

无依赖项方法[用于将日期显示为格式化字符串]

如果你想要以日/月/年的形式显示你的DateTime值或任何你喜欢的格式,字符串插值可以很方便:

"${_date.day} / ${_date.month} / ${_date.year}"

示例输出:

It's 23 out of 4 out of 1920

我不想使用任何额外的库,所以我走了这条路。

另一种方法,使用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');