我试图在点击按钮后在文本小部件中显示当前的日期时间。以下是可以的,但是我想改变格式。

当前的方法

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提供一个简单的扩展方法如何?运行时可能不是很好,因为我们多次迭代字符串并遍历每个%格式选项。可能会浏览一次,贪婪地替换%。

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'

请随意提出修改建议。

其他回答

最简单的直接方法,无需安装额外的包是

约会:

datetime.toIso8601String().split("T")[0];

获得时间:

datetime.toIso8601String().split("T")[1];

你可以从intl包中使用DateFormat。

import 'package:intl/intl.dart';

DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd – kk:mm').format(now);

使用这个函数

todayDate() {
    var now = new DateTime.now();
    var formatter = new DateFormat('dd-MM-yyyy');
    String formattedTime = DateFormat('kk:mm:a').format(now);
    String formattedDate = formatter.format(now);
    print(formattedTime);
    print(formattedDate);
  }

输出:

08:41:AM
21-12-2019

为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'

请随意提出修改建议。

你不能在dart中格式化日期,所以你需要使用外部包,我会推荐这篇文章: https://www.geeksforgeeks.org/format-dates-in-flutter/