如何安排与达特的约会?

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

336379 次浏览

你可以使用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包含每个国家/语言的所有格式,如果你想更深入地了解的话。

这也会起作用:

DateTime today = new DateTime.now();
String dateSlug ="${today.year.toString()}-${today.month.toString().padLeft(2,'0')}-${today.day.toString().padLeft(2,'0')}";
print(dateSlug);

这样你就可以在社交网络中找到日期:“今天”,“昨天”,“一周的哪一天”,等等。”

void main() {
DateTime now = new DateTime(2018,6,26);
print(date(now));
}
    

String date(DateTime tm) {
DateTime today = new DateTime.now();
Duration oneDay = new Duration(days: 1);
Duration twoDay = new Duration(days: 2);
Duration oneWeek = new Duration(days: 7);
String month;
switch (tm.month) {
case 1:
month = "january";
break;
case 2:
month = "february";
break;
case 3:
month = "march";
break;
case 4:
month = "april";
break;
case 5:
month = "may";
break;
case 6:
month = "june";
break;
case 7:
month = "july";
break;
case 8:
month = "august";
break;
case 9:
month = "september";
break;
case 10:
month = "october";
break;
case 11:
month = "november";
break;
case 12:
month = "december";
break;
}
    

Duration difference = today.difference(tm);
    

if (difference.compareTo(oneDay) < 1) {
return "today";
} else if (difference.compareTo(twoDay) < 1) {
return "yesterday";
} else if (difference.compareTo(oneWeek) < 1) {
switch (tm.weekday) {
case 1:
return "monday";
case 2:
return "tuesday";
case 3:
return "wednesday";
case 4:
return "thursday";
case 5:
return "friday";
case 6:
return "saturday";
case 7:
return "sunday";
}
} else if (tm.year == today.year) {
return '${tm.day} $month';
} else {
return '${tm.day} $month ${tm.year}';
}
}

你也可以像前面说的那样指定日期格式: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);

生产:March 4

有一个包date_format

dependencies:
date_format:

代码

import 'package:date_format/date_format.dart';


final formattedStr = formatDate(
yourDateTime, [dd, '.', mm, '.', yy, ' ', HH, ':', nn]);


// output example "29.03.19 07:00"

注意:分钟数为神经网络

链接到包

如果有人想将字符串格式的日期转换为其他字符串格式,首先使用DateTime.parse("2019-09-30"),然后将其传递给DateFormat("date pattern").format()

dateFormate = DateFormat("dd-MM-yyyy").format(DateTime.parse("2019-09-30"));

参考: 如何将简单的日期字符串格式从yyyy-MM-dd改为dd-MM-yyyy

import 'package:intl/intl.dart';


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

更多细节可以参考DateFormat文档

pubspec.yaml:

dependencies:
intl:

main.dart:

import 'package:intl/intl.dart'; // for date format
import 'package:intl/date_symbol_data_local.dart'; // for other locales


void main() {
var now = DateTime.now();
print(DateFormat().format(now)); // This will return date using the default locale
print(DateFormat('yyyy-MM-dd hh:mm:ss').format(now));
print(DateFormat.yMMMMd().format(now)); // print long date
print(DateFormat.yMd().format(now)); // print short date
print(DateFormat.jms().format(now)); // print time


initializeDateFormatting('es'); // This will initialize Spanish locale
print(DateFormat.yMMMMd('es').format(now)); // print long date in Spanish format
print(DateFormat.yMd('es').format(now)); // print short date in Spanish format
print(DateFormat.jms('es').format(now)); // print time in Spanish format
}

结果:

May 31, 2020 5:41:42 PM
2020-05-31 05:41:42
May 31, 2020
5/31/2020
5:41:42 PM
31 de mayo de 2020
31/5/2020
17:41:42

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

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

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

    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;
}

如果不想添加另一个库,也可以使用此方法

  DateTime dateTime = DateTime.now();
String YYYY_MM_DD = dateTime.toIso8601String().split('T').first;
print(YYYY_MM_DD); //2020-11-23


String formatDate(String date) {
return date.substring(0, 10).split('-').reversed.join().replaceAll('-', '/');
    

}

From format "yyyy-mm-dd H:i:s"

 String dateConverter(String date) {
// Input date Format
final format = DateFormat("dd-MM-yyyy");
DateTime gettingDate = format.parse(date);
final DateFormat formatter = DateFormat('yyyy-MM-dd');
// Output Date Format
final String formatted = formatter.format(gettingDate);
return date;
}

可以使用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

另一种方式。

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

一个更简单的方法:

new DateFormat("dd-MM-y").format(YOUR_DATETIME_HERE)
/// Get date as a string for display.
String getFormattedDate(String date) {
/// Convert into local date format.
var localDate = DateTime.parse(date).toLocal();


/// inputFormat - format getting from api or other func.
/// e.g If 2021-05-27 9:34:12.781341 then format must be yyyy-MM-dd HH:mm
/// If 27/05/2021 9:34:12.781341 then format must be dd/MM/yyyy HH:mm
var inputFormat = DateFormat('yyyy-MM-dd HH:mm');
var inputDate = inputFormat.parse(localDate.toString());


/// outputFormat - convert into format you want to show.
var outputFormat = DateFormat('dd/MM/yyyy HH:mm');
var outputDate = outputFormat.format(inputDate);


return outputDate.toString();
}

使用“H: mm"看到完整的时间是13:08,而不是13:8

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

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

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

示例输出:

23 / 4 / 1920

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

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

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)
}

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 < / p >

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

由于flutter常用的Datetime库不知道德国的区域设置——de、de、de_DE、de- de或任何其他组合都不知道,例如,如果您希望用人类可读的字符串编写月份名称或日期名称,我建议您使用以下代码。

安装pub flutter pub add date_format

String formattedDate = formatDate(DateTime(year, month, day),[dd,'. ', MM, ' ', yyyy], locale: GermanDateLocale());

目前天:

DateTime.now().day, //something like 26

目前月:

DateTime.now().month, //something like 4

本年度:

DateTime.now().year, //something like 2022

目前Houre:

DateTime.now().hour, //something like 12

当前时间:

DateTime.now().minute, //something like 13

目前第二:

DateTime.now().second, //something like 44

设置你的项目intl

dateTimeFormet (date){
//MM-dd-yyyy
//yyyy-MM-dd
return DateFormat('dd-MM-yyyy').format(date);// you can set your formet
}


void main (){
var date = 01-11-2022 00 : 00
var _datetime = dateTimeFormet(date);
print(_dateTime);
}