我想知道我们是否可以在flutter项目中格式化没有Intl
包的DateTime
。
我想做的如下:
- 比较
if case
中没有时间的两个日期 - 将api中的
datetime
字符串格式化为给定的格式,如yMMMMd
- 仅从给定的
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);
- 在if情况下比较两个没有时间的日期
您可以使用DateTime.compareTo
来比较DateTime
对象。如果你想忽略任何时间信息,你可以先去掉时间。
- 将日期时间字符串从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}';
请注意,以上内容不会根据区域设置对任何组件进行重新排序或调整。
- 仅从给定的dateTime字符串中获取时间
同样,您可以编写一个辅助函数来从DateTime
中提取时间分量,并根据需要进行处理。Flutter Material有一个TimeOfDay
类,它可以直接由DateTime
构建,可以表示小时和分钟,如果您想要更高的精度,也可以轻松创建自己的类。