如何在Flutter中格式化DateTime



点击按钮后,我正试图在Text小部件中显示当前DateTime。以下内容有效,但我想更改格式。

当前方法

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包添加到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");

使用这种方法,不需要导入任何库。

DateTime now = DateTime.now();
String convertedDateTime = "${now.year.toString()}-${now.month.toString().padLeft(2,'0')}-${now.day.toString().padLeft(2,'0')} ${now.hour.toString().padLeft(2,'0')}-${now.minute.toString().padLeft(2,'0')}";

输出

2020-12-05 14:57

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

但是,日期将采用字符串格式。如果需要时间,则更改子字符串值

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

试试这个包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

使用此函数

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

自0.16以来有一些变化,所以这里我是怎么做的,

在pubspec.yaml 中导入

dependencies:
flutter:
sdk: flutter
intl: ^0.16.1

那么使用

txdate= DateTime.now()

DateFormat.yMMMd().format(txdate)

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

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

您也可以使用此语法。对于YYYY-MM-JJ HH-MM:

var now = DateTime.now();
var month = now.month.toString().padLeft(2, '0');
var day = now.day.toString().padLeft(2, '0');
var text = '${now.year}-$month-$day ${now.hour}:${now.minute}';

如果用户是美国公民,但希望以24小时格式查看所有内容,那么
基于区域设置显示12/24小时将无法满足用户

// getting system settings 12/24 h format
if (MediaQuery.of(context).alwaysUse24HourFormat){
timeFormat = new DateFormat("kk:mm", languageCode); //24h format
}
else{
timeFormat = new DateFormat("KK:mm a", languageCode); //12h format
}
//then use it:
'${timeFormat.format DateTime.now())}'

使用字符串拆分方法删除: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]}";
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");

在不安装额外软件包的情况下,最简单的直接方法是

获取日期:

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'

请随时提出更改建议。

您无法在dart中设置日期格式,因此需要使用外部包,我推荐这篇文章:https://www.geeksforgeeks.org/format-dates-in-flutter/

Usa esta operatión que puedes personalizar:

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)

在谷歌上,人们对西班牙没有兴趣。

最新更新