我们可以在没有Intl包的情况下在dart/flutter中格式化DateTime吗



我想知道我们是否可以在flutter项目中格式化没有Intl包的DateTime

我想做的如下:

  1. 比较if case中没有时间的两个日期
  2. 将api中的datetime字符串格式化为给定的格式,如yMMMMd
  3. 仅从给定的dateTime字符串中获取Time

我已经用intl包做到了这一点,但我们能在没有包依赖性的情况下做到吗?

是的,您可以在没有Intl包的情况下格式化DateTime,Intl包只是准备使用方法,但您可以创建自己的格式为了做到这一点,你需要制作一个月列表,也许还有一个天列表,当你从API收到字符串形式的日期时,你必须使用DateTime.parse.

我希望这个例子能让你明白

List<String> monthList = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
];
void yMMMMdDateFromate(String stringDateTime) {
DateTime dateTime = DateTime.parse(stringDateTime);
String dateTimeyMMMMdDateFromate =
'${monthList[dateTime.month - 1]} ${dateTime.day}, ${dateTime.year} ';
print(dateTimeyMMMMdDateFromate);
}

此函数接收字符串DateTime并将其打印为yMMMMd格式。

对于比较2个日期,在使用DateTime.parse方法将字符串转换为DateTime后,可以使用

dateTime.isAfter(dateTime2);
dateTime.isBefore(dateTime2);
dateTime.isAtSameMomentAs(dateTime2);
  1. 在if情况下比较两个没有时间的日期

您可以使用DateTime.compareTo来比较DateTime对象。如果你想忽略任何时间信息,你可以先去掉时间。

  1. 将日期时间字符串从api格式化为给定格式,如yMMMMd

您可以使用字符串插值和DateTime的字段将它们手动格式化为特定格式。

String monthName(int month) {
switch (month) {
case DateTime.january:
return 'January';
case DateTime.february:
return 'February';
...
}
}
var dateTime = DateTime.now();
var s = '${dateTime.year} ${monthName(dateTime.month)} ${dateTime.day}';

请注意,以上内容不会根据区域设置对任何组件进行重新排序或调整。

  1. 仅从给定的dateTime字符串中获取时间

同样,您可以编写一个辅助函数来从DateTime中提取时间分量,并根据需要进行处理。Flutter Material有一个TimeOfDay类,它可以直接由DateTime构建,可以表示小时和分钟,如果您想要更高的精度,也可以轻松创建自己的类。

最新更新