Cómo formatear DateTime en Flutter

104

Estoy tratando de mostrar la corriente DateTimeen un Textwidget después de tocar un botón. Lo siguiente funciona, pero me gustaría cambiar el formato.

Enfoque actual

DateTime now = DateTime.now();
currentTime = new DateTime(now.year, now.month, now.day, now.hour, now.minute);
 Text('$currentTime'), 

Resultado

YYYY-MM-JJ HH-MM:00.000

Pregunta

¿Cómo puedo quitar la :00.000pieza?

Nitneuq
fuente

Respuestas:

227

Puede usar DateFormatdesde el paquete intl .

import 'package:intl/intl.dart';

DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd – kk:mm').format(now);
boformer
fuente
50
No olvide agregar intl: 0.15.7dependencia a su pubspec.yamlarchivo. La última versión de la biblioteca se puede encontrar aquí .
Defuera
paquete internacional tiene calificaciones muy bajas
Aseem
¿Alguien más obtiene que no se puede acceder a los miembros estáticos en los inicializadores?
MrPool
@MrPool Sí, no se puede acceder al mismo problema con los miembros estáticos en los inicializadores. Muy frustrante porque tener la fecha estática no tiene sentido.
Michael Tolsma
2
Si desea utilizar una configuración regional específica, puede usar, por ejemplo: DateFormat.yMd(myLocale.languageCode).format(now)donde obtiene la configuración regional actual del dispositivo como esta:Locale myLocale = Localizations.localeOf(context)
Zsolt
40

Agregue el intl paquete a su pubspec.yamlarchivo.

import 'package:intl/intl.dart';

DateFormat dateFormat = DateFormat("yyyy-MM-dd HH:mm:ss");

Conversión del objeto DateTime en String

String string = dateFormat.format(DateTime.now());

Conversión de cadena en objeto DateTime

DateTime dateTime = dateFormat.parse("2019-07-19 8:40:23");
CopsOnRoad
fuente
18

Con este enfoque, no es necesario importar ninguna biblioteca.

DateTime now = DateTime.now();

String convertedDateTime = "${now.year.toString()}-${now.month.toString().padLeft(2,'0')}-${now.day.toString().padLeft(2,'0')} ${now.hour.toString()}-${now.minute.toString()}";
Aprende rápido
fuente
4
Además del guión que falta, esta es la mejor manera de hacerlo sin agregar otra dependencia.
01000101
1
Esto es bueno, pero la hora regresa a la hora estándar no estadounidense en un reloj de 24 horas. Aritmética ... suspiro ... olvídalo, solo recibiré el paquete
Amir Memon
12

Pruebe este paquete, Jiffy , también se ejecuta sobre Intl , pero facilita el uso de la sintaxis de momentjs . Vea abajo

import 'package:jiffy/jiffy.dart';   

var now = Jiffy().format("yyyy-MM-dd HH:mm:ss");

También puede hacer lo siguiente

var a = Jiffy().yMMMMd; // October 18, 2019

Y también puede pasar su objeto DateTime, una cadena y una matriz

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
Jama Mohamed
fuente
5

hay algunos cambios desde el 0.16 así que aquí cómo lo hice,

importar en pubspec.yaml

dependencies:
      flutter:
        sdk: flutter
      intl: ^0.16.1

luego usa

  txdate= DateTime.now()


  DateFormat.yMMMd().format(txdate)
asli
fuente
4

Esta es mi sencilla solución. Eso no requiere ninguna dependencia.

Sin embargo, la fecha estará en formato de cadena. Si quieres la hora, cambia los valores de la subcadena

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

Usa esta función

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);
  }

Salida:

08:41:AM
21-12-2019
Harbdollar
fuente
2

También puede utilizar esta sintaxis. Para AAAA-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}';
Jean Carlos
fuente
Esto no agrega el relleno correcto para el verdadero "aaaa-MM-dd"
01000101
1

Utilice el método String split para eliminar: 00.000

var formatedTime = currentTime.toString().split(':')
Text(formatedTime[0])

======= O USE EL código ABAJO para el formato AAAA-MM-DD HH: MM: SS sin usar la biblioteca ====

var stringList =  DateTime.now().toIso8601String().split(new RegExp(r"[T\.]"));
var formatedDate = "${stringList[0]} ${stringList[1]}";
Mohd Danés Khan
fuente