我试图在点击按钮后在文本小部件中显示当前的日期时间。以下是可以的,但是我想改变格式。
当前的方法
DateTime now = DateTime.now();
currentTime = new DateTime(now.year, now.month, now.day, now.hour, now.minute);
Text('$currentTime'),
结果
YYYY-MM-JJ HH-MM: 00.000
问题
如何移除:00.000部分?
我试图在点击按钮后在文本小部件中显示当前的日期时间。以下是可以的,但是我想改变格式。
当前的方法
DateTime now = DateTime.now();
currentTime = new DateTime(now.year, now.month, now.day, now.hour, now.minute);
Text('$currentTime'),
结果
YYYY-MM-JJ HH-MM: 00.000
问题
如何移除:00.000部分?
当前回答
最简单的直接方法,无需安装额外的包是
约会:
datetime.toIso8601String().split("T")[0];
获得时间:
datetime.toIso8601String().split("T")[1];
其他回答
为DateTime提供一个简单的扩展方法如何?运行时可能不是很好,因为我们多次迭代字符串并遍历每个%格式选项。可能会浏览一次,贪婪地替换%。
extension DateTimeFormat on DateTime {
/// Supports the following, inspired by: https://linux.die.net/man/3/strptime
/// %Y: The year, including century (for example, 1991).
/// %m: The month number (1-12).
/// %d: The day of month (1-31).
/// %H: The hour (0-23).
/// %M: The minute (0-59).
/// %S: The second (0-59).
String format(String formatString) {
var hourString = hour.toString();
var dayString = day.toString();
var monthString = month.toString();
var minuteString = minute.toString();
var secondString = second.toString();
var yearString = year.toString();
var map = {
'%H': hourString.padLeft(3 - hourString.length, '0'), // the pad values here are the desired length + 1
'%d': dayString.padLeft(3 - dayString.length, '0'),
'%m': monthString.padLeft(3 - monthString.length, '0'),
'%M': minuteString.padLeft(3 - minuteString.length, '0'),
'%S': secondString.padLeft(3 - secondString.length, '0'),
'%Y': yearString.padLeft(5 - yearString.length, '0'),
};
return map.entries.fold(formatString, (acc, entry) => acc.replaceAll(entry.key, entry.value));
}
}
用法:
print(DateTime(2021, 10, 16, 4, 4, 4, 4, 4).format('%Y-%m-%d-%H-%M-%S'));
// '2021-10-16-04-04-04'
请随意提出修改建议。
试试这个包,Jiffy,它也运行在Intl之上,但是使用momentjs语法更容易。见下文
import 'package:jiffy/jiffy.dart';
var now = Jiffy().format("yyyy-MM-dd HH:mm:ss");
您还可以执行以下操作
var a = Jiffy().yMMMMd; // October 18, 2019
你也可以传入DateTime对象,一个字符串和一个数组
var a = Jiffy(DateTime(2019, 10, 18)).yMMMMd; // October 18, 2019
var a = Jiffy("2019-10-18").yMMMMd; // October 18, 2019
var a = Jiffy([2019, 10, 18]).yMMMMd; // October 18, 2019
static String convertDateFormat(String dateTimeString, String oldFormat, String
newFormat) {
DateFormat newDateFormat = DateFormat(newFormat);
DateTime dateTime = DateFormat(oldFormat).parse(dateTimeString);
String selectedDate = newDateFormat.format(dateTime);
return selectedDate;
}
这样调用这个方法
convertDateFormat(inputDate, "dd-mm-yyyy", "d MMM yyyy");
使用字符串分割方法删除:00.000
var formatedTime = currentTime.toString().split(':')
Text(formatedTime[0])
=======或使用以下代码YYYY-MM-DD HH:MM:SS格式,不使用库====
var stringList = DateTime.now().toIso8601String().split(new RegExp(r"[T\.]"));
var formatedDate = "${stringList[0]} ${stringList[1]}";
将intl包添加到您的pubspec。yaml文件。
import 'package:intl/intl.dart';
DateFormat dateFormat = DateFormat("yyyy-MM-dd HH:mm:ss");
将DateTime对象转换为字符串
String string = dateFormat.format(DateTime.now());
将字符串转换为DateTime对象
DateTime dateTime = dateFormat.parse("2019-07-19 8:40:23");