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

当前的方法

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部分?


当前回答

你可以从intl包中使用DateFormat。

import 'package:intl/intl.dart';

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

其他回答

你可以从intl包中使用DateFormat。

import 'package:intl/intl.dart';

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

这是我的简单解决方案。这并不需要任何依赖关系。

但是,日期将是字符串格式。如果你想要时间,那么改变子字符串的值

print(new DateTime.now()
            .toString()
            .substring(0,10)
     );   // 2020-06-10

使用这个选项,你可以自定义:

static String formatDateTime(DateTime fecha, String formato) {
    var _index = 0;
    var _letra = '';
    var _fecha = '';
    var _auxiliar = '';
    //
    //Evalua todas las letras
    while (_letra != '[/]') {
      _letra = _index < formato.length ? formato[_index++] : '[/]';
      //
      //suma las letra para luego aplicarles el formato
      if (_auxiliar.isEmpty || _auxiliar[0] == _letra) {
        _auxiliar += _letra;

        continue;
      }
      //
      //aplica el formato de las letras acumuladas
      switch (_auxiliar) {
        case 'yy':
          _fecha += fecha.year.toString().substring(2);
          break;
        case 'yyyy':
          _fecha += fecha.year.toString();
          break;
        case 'M':
          _fecha += fecha.month.toString();
          break;
        case 'MM':
          _fecha +=
              fecha.month < 10 ? '0${fecha.month}' : fecha.month.toString();
          break;
        case 'd':
          _fecha += fecha.day.toString();
          break;
        case 'dd':
          _fecha += fecha.day < 10 ? '0${fecha.day}' : fecha.day.toString();
          break;
        case 'h':
          _fecha += 12 < fecha.hour
              ? (fecha.hour - 12).toString()
              : fecha.hour.toString();
          break;
        case 'hh':
          _fecha += fecha.hour < 10
              ? '0${fecha.hour}'
              : 12 < fecha.hour
                  ? (fecha.hour - 12).toString()
                  : fecha.hour.toString();
          break;
        case 'H':
          _fecha += fecha.hour.toString();
          break;
        case 'HH':
          _fecha += fecha.hour < 10 ? '0${fecha.hour}' : fecha.hour.toString();
          break;
        case 'm':
          _fecha += fecha.minute.toString();
          break;
        case 'mm':
          _fecha +=
              fecha.minute < 10 ? '0${fecha.minute}' : fecha.minute.toString();
          break;
        case 's':
          _fecha += fecha.second.toString();
          break;
        case 'ss':
          _fecha +=
              fecha.second < 10 ? '0${fecha.second}' : fecha.second.toString();
          break;
        case 't':
          _fecha += fecha.hour < 12 ? 'a' : 'p';
          break;
        case 'tt':
          _fecha += fecha.hour < 12 ? 'am' : 'pm';
          break;
        case 'f':
        case 'ff':
        case 'fff':
        case 'ffff':
          _fecha += fecha.millisecond.toString().substring(0, _auxiliar.length);
          break;
        case 'z':
          if (fecha.isUtc) {
            _fecha += '0';
          } else {
            _fecha +=
                (fecha.timeZoneOffset.inMinutes / 60).truncate().toString();
          }
          break;
        case 'zz':
          if (fecha.isUtc) {
            _fecha += '00';
          } else {
            var _horas = (fecha.timeZoneOffset.inMinutes / 60).truncate();

            _fecha += (fecha.timeZoneOffset.inMinutes < 0 ? '-' : '+') +
                (_horas < 10 ? '0$_horas' : _horas.toString());
          }
          break;
        case 'zzz':
          if (fecha.isUtc) {
            _fecha += '00:00';
          } else {
            _fecha += (fecha.timeZoneOffset.inMinutes < 0 ? '-' : '+') +
                formatDateTime(
                    DateTime.fromMillisecondsSinceEpoch(
                        fecha.timeZoneOffset.inMilliseconds),
                    'hh:mm');
          }
          break;
        default:
          _fecha += _auxiliar;
          break;
      }
      //
      //siguiente
      _auxiliar = _letra;
    }
    //
    //Fin
    return _fecha;
  }

使用方法如下:

print(formatDateTime(DateTime.now().toUtc(), 'dd-MM-yyyy hh:mm tt'));
print(formatDateTime(DateTime.now().toUtc(), 'dd-MM-yyyy hh:mm tt (GTM zzz)'));
// 28-07-2022 04:52:59 pm
// 28-07-2022 04:52:59 pm (GTM -6:00)

不喜欢西班牙语的人可以用谷歌翻译,就像我用英语翻译一样,问候。

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

您可以使用DateTime.now()或clock.now()。带时钟库的样本:

import 'package:clock/clock.dart';

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