Jak sformatować DateTime w Flutter, jak uzyskać aktualny czas we flutterze?

115

Próbuję wyświetlić prąd DateTimew Textwidżecie po dotknięciu przycisku. Następujące działa, ale chciałbym zmienić format.

Obecne podejście

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

Wynik

YYYY-MM-JJ HH-MM:00.000

Pytanie

Jak mogę usunąć tę :00.000część?

Nitneuq
źródło

Odpowiedzi:

245

Możesz użyć DateFormatz pakietu intl .

import 'package:intl/intl.dart';

DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd – kk:mm').format(now);
boformer
źródło
52
Nie zapomnij dodać intl: 0.15.7zależności do swojego pubspec.yamlpliku. Najnowszą wersję biblioteki można znaleźć tutaj .
Defuera
Pakiet intl ma bardzo niskie oceny
Aseem
Czy ktoś jeszcze uzyskuje dostęp do statycznych elementów członkowskich w inicjatorach?
MrPool
@MrPool Tak, ten sam problem z elementami statycznymi nie jest dostępny w inicjatorach. Bardzo frustrujące, ponieważ statyczna data nie ma sensu.
Michael Tolsma
2
Jeśli chcesz użyć określonej lokalizacji, możesz użyć np .: DateFormat.yMd(myLocale.languageCode).format(now)gdzie uzyskujesz aktualne ustawienia regionalne urządzenia w następujący sposób:Locale myLocale = Localizations.localeOf(context)
Zsolt
46

Dodaj intl pakiet do swojego pubspec.yamlpliku.

import 'package:intl/intl.dart';

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

Konwertowanie obiektu DateTime na String

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

Konwersja String do obiektu DateTime

DateTime dateTime = dateFormat.parse("2019-07-19 8:40:23");
CopsOnRoad
źródło
21

Przy takim podejściu nie ma potrzeby importowania żadnej biblioteki.

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

Wynik

2020-12-05 14:57

Szybki uczeń
źródło
5
Oprócz brakującego myślnika jest to najlepszy sposób, aby przejść bez dodawania kolejnej zależności.
01000101
1
To dobrze, ale godzina zwraca standardowy czas inny niż amerykański w zegarze 24-godzinnym. Arytmetyka ... westchnij ... zapomnij, po prostu dostanę paczkę
Amir Memon
Jaki jest problem z zależnościami zewnętrznymi? Tak to wygląda w 2020 roku :-)
funder7
13

Wypróbuj ten pakiet, Jiffy , działa również na bazie Intl , ale ułatwia korzystanie ze składni momentjs . Zobacz poniżej

import 'package:jiffy/jiffy.dart';   

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

Możesz także wykonać następujące czynności

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

Możesz również przekazać swój obiekt DateTime, ciąg znaków i tablicę

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
źródło
6

nastąpiła pewna zmiana od wersji 0.16, więc tutaj, jak to zrobiłem,

import w pliku pubspec.yaml

dependencies:
      flutter:
        sdk: flutter
      intl: ^0.16.1

następnie użyj

  txdate= DateTime.now()


  DateFormat.yMMMd().format(txdate)
asli
źródło
6

Oto moje proste rozwiązanie. To nie wymaga żadnej zależności.

Jednak data będzie w formacie ciągu. Jeśli chcesz ustawić czas, zmień wartości podciągów

print(new DateTime.now()
            .toString()
            .substring(0,10)
     );   // 2020-06-10
zizutg
źródło
Działa to dobrze bez żadnego pakietu. Poniżej znajduje się sposób na zrobienie tego. DateTime now = DateTime.now (); DateTime date = new DateTime (now.year, now.month, now.day); print (date.toString (). substring (0, 10));
Raju Gupta
4

Użyj tej funkcji

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

Wynik:

08:41:AM
21-12-2019
Harbdollar
źródło
2

Możesz również użyć tej składni. Dla RRRR-MM-JJ GG-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
źródło
Nie powoduje to dodania poprawnego wypełnienia dla rzeczywistego „rrrr-MM-dd”
01000101
1

Użyj metody podziału ciągów, aby usunąć: 00.000

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

======= LUB UŻYJ PONIŻEJ kodu dla formatu RRRR-MM-DD GG: MM: SS bez korzystania z biblioteki ====

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