So formatieren Sie DateTime in Flutter

104

Ich versuche, den aktuellen Wert DateTimein einem TextWidget anzuzeigen, nachdem ich auf eine Schaltfläche getippt habe. Das Folgende funktioniert, aber ich möchte das Format ändern.

Aktueller Ansatz

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

Ergebnis

YYYY-MM-JJ HH-MM:00.000

Frage

Wie kann ich das :00.000Teil entfernen ?

Nitneuq
quelle

Antworten:

230

Sie können DateFormatvon intl Paket verwenden.

import 'package:intl/intl.dart';

DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd – kk:mm').format(now);
Boformer
quelle
50
Vergessen Sie nicht intl: 0.15.7, Ihrer pubspec.yamlDatei eine Abhängigkeit hinzuzufügen . Die neueste Version der Bibliothek finden Sie hier .
Defuera
intl Paket hat sehr niedrige Bewertungen
Aseem
Kann sonst noch jemand, der diese statischen Mitglieder erhält, in Initialisierern nicht darauf zugreifen?
MrPool
@MrPool Ja, auf dasselbe Problem mit den statischen Elementen kann in Initialisierern nicht zugegriffen werden. Sehr frustrierend, weil es keinen Sinn macht, das Datum statisch zu haben.
Michael Tolsma
2
Wenn Sie ein bestimmtes Gebietsschema verwenden möchten, können Sie Folgendes verwenden: DateFormat.yMd(myLocale.languageCode).format(now)Hier erhalten Sie das aktuelle Gebietsschema des Geräts wie folgt:Locale myLocale = Localizations.localeOf(context)
Zsolt
40

Fügen Sie Ihrer Datei ein intl Paket hinzupubspec.yaml .

import 'package:intl/intl.dart';

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

Konvertieren des DateTime-Objekts in einen String

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

Konvertieren eines Strings in ein DateTime-Objekt

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

Bei diesem Ansatz muss keine Bibliothek importiert werden.

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()}";
Schneller Lerner
quelle
4
Neben dem fehlenden Bindestrich ist dies der beste Weg, ohne eine weitere Abhängigkeit hinzuzufügen.
01000101
1
Dies ist gut, aber die Stunde gibt die Nicht-US-Standardzeit im 24-Stunden-Format zurück. Arithmetik ... seufz ... vergiss es, ich bekomme nur das Paket
Amir Memon
13

Probieren Sie dieses Paket aus, Jiffy . Es läuft ebenfalls über Intl , erleichtert jedoch die Verwendung der momentjs- Syntax. Siehe unten

import 'package:jiffy/jiffy.dart';   

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

Sie können auch Folgendes tun

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

Sie können auch Ihr DateTime-Objekt, eine Zeichenfolge und ein Array übergeben

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
quelle
5

Es gibt einige Änderungen seit dem 0.16, also hier, wie ich es gemacht habe,

Import in die pubspec.yaml

dependencies:
      flutter:
        sdk: flutter
      intl: ^0.16.1

dann benutze

  txdate= DateTime.now()


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

Hier ist meine einfache Lösung. Das erfordert keine Abhängigkeit.

Das Datum wird jedoch im Zeichenfolgenformat angezeigt. Wenn Sie die Zeit möchten, ändern Sie die Teilzeichenfolgenwerte

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

Verwenden Sie diese Funktion

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

Ausgabe:

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

Sie können diese Syntax auch verwenden. Für JJJJ-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
quelle
Dies fügt keine korrekte Polsterung für echtes "JJJJ-MM-
TT
1

Verwenden Sie die String-Split-Methode, um Folgendes zu entfernen: 00.000

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

======= ODER VERWENDEN SIE UNTEN Code für JJJJ-MM-TT HH: MM: SS-Format ohne Verwendung der Bibliothek ====

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