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?

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

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

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

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

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)

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

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

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

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]}";
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.