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 ?

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

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

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

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

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)

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

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

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

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]}";
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.