Flutter'da DateTime nasıl biçimlendirilir


104

Bir düğmeye dokunduktan sonra akımı DateTimebir Textwidget'ta görüntülemeye çalışıyorum . Aşağıdakiler işe yarıyor, ancak formatı değiştirmek istiyorum.

Mevcut yaklaşım

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

Sonuç

YYYY-MM-JJ HH-MM:00.000

Soru

Parçayı nasıl çıkarabilirim :00.000?

Yanıtlar:


230

Sen kullanabilirsiniz DateFormatgelen intl paketinin.

import 'package:intl/intl.dart';

DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd – kk:mm').format(now);

50
Dosyanıza intl: 0.15.7bağımlılık eklemeyi unutmayın pubspec.yaml. Kütüphanenin son versiyonu burada bulunabilir .
Defuera

intl paket çok düşük değerlerine sahip
Aseem

Başlatıcılarda bu statik üyelere erişilemeyen başka kimse var mı?
MrPool

@MrPool Evet, başlatıcılarda statik üyelerle aynı soruna erişilemez. Çok sinir bozucu çünkü statik tarihe sahip olmak bir anlam ifade etmiyor.
Michael Tolsma

2
Belirli bir yerel ayarı kullanmak istiyorsanız, örneğin: DateFormat.yMd(myLocale.languageCode).format(now)mevcut cihaz yerel ayarını Locale myLocale = Localizations.localeOf(context)
Zsolt

40

Ekle intl paketi sizin için pubspec.yamldosyanın.

import 'package:intl/intl.dart';

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

DateTime nesnesini String'e dönüştürme

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

String'i DateTime nesnesine dönüştürme

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

18

Bu yaklaşımla herhangi bir kitaplığı içe aktarmaya gerek yoktur.

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
Eksik çizginin yanı sıra, başka bir bağımlılık eklemeden gitmenin en iyi yolu budur.
01000101

1
Bu iyidir, ancak saat 24 saatlik düzende ABD dışı standart saate dönüyor. Aritmetik .... ah ... unut gitsin, sadece paketi alacağım
Amir Memon

13

Bu paketi deneyin, Jiffy , aynı zamanda Intl üzerinde de çalışır , ancak momentjs sözdizimini kullanmayı kolaylaştırır . Aşağıya bakınız

import 'package:jiffy/jiffy.dart';   

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

Aşağıdakileri de yapabilirsiniz

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

Ayrıca DateTime nesnenizi, bir dizeyi ve bir diziyi de iletebilirsiniz.

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

0.16'dan bu yana bazı değişiklikler var.

pubspec.yaml'de içe aktar

dependencies:
      flutter:
        sdk: flutter
      intl: ^0.16.1

sonra kullan

  txdate= DateTime.now()


  DateFormat.yMMMd().format(txdate)

4

İşte benim basit çözümüm. Bu herhangi bir bağımlılık gerektirmez.

Ancak tarih, dize biçiminde olacaktır. Zamanı istiyorsanız, alt dize değerlerini değiştirin

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

2

Bu işlevi kullanı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);
  }

Çıktı:

08:41:AM
21-12-2019

2

Bu sözdizimini de kullanabilirsiniz. YYYY-MM-JJ HH-MM için:

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

Bu, gerçek "yyyy-MM-gg" için doğru dolgu
eklemiyor

1

Kaldırmak için Dize bölme yöntemini kullanın: 00.000

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

======= VEYA YYYY-AA-GG SS: DD: Kitaplık kullanmadan SS biçimi için AŞAĞIDAKİ kodu KULLANIN ====

var stringList =  DateTime.now().toIso8601String().split(new RegExp(r"[T\.]"));
var formatedDate = "${stringList[0]} ${stringList[1]}";
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.