Bagaimana memformat DateTime di Flutter, Bagaimana cara mendapatkan waktu saat ini dalam flutter?

113

Saya mencoba menampilkan arus DateTimedalam Textwidget setelah mengetuk tombol. Berikut ini berfungsi, tetapi saya ingin mengubah formatnya.

Pendekatan saat ini

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

Hasil

YYYY-MM-JJ HH-MM:00.000

Pertanyaan

Bagaimana cara menghapus :00.000bagian tersebut?

Nitneuq
sumber

Jawaban:

243

Anda dapat menggunakan DateFormatdari paket intl .

import 'package:intl/intl.dart';

DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd – kk:mm').format(now);
boformer
sumber
52
Jangan lupa menambahkan intl: 0.15.7ketergantungan ke pubspec.yamlfile Anda . Versi terbaru perpustakaan dapat ditemukan di sini .
Defuera
Paket intl memiliki peringkat yang sangat rendah
Aseem
Adakah orang lain yang mendapatkan bahwa anggota statis tidak dapat diakses di penginisialisasi?
MrPool
@MrPool Ya, masalah yang sama dengan anggota statis tidak dapat diakses di penginisialisasi. Sangat membuat frustrasi karena memiliki tanggal statis tidak masuk akal.
Michael Tolsma
2
Jika Anda ingin menggunakan lokal tertentu, Anda dapat menggunakan mis .: di DateFormat.yMd(myLocale.languageCode).format(now)mana Anda mendapatkan perangkat lokal saat ini seperti ini:Locale myLocale = Localizations.localeOf(context)
Zsolt
46

Tambahkan intl paket ke pubspec.yamlfile Anda .

import 'package:intl/intl.dart';

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

Mengonversi objek DateTime menjadi String

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

Mengonversi String menjadi objek DateTime

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

Dengan pendekatan ini, tidak perlu mengimpor perpustakaan apa pun.

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

Keluaran

2020-12-05 14:57

Cepat Belajar
sumber
5
Selain tanda hubung yang hilang, ini adalah cara terbaik untuk melakukannya tanpa menambahkan dependensi lagi.
01000101
1
Ini bagus tetapi jamnya mengembalikan waktu standar non-AS pada format 24 jam. Aritmatika .... sigh ... lupakan saja, saya hanya akan mendapatkan paketnya
Amir Memon
Apa masalah dengan dependensi eksternal? Begitulah cara kerjanya di 2020 :-)
pemberi dana7
13

Cobalah paket ini, Jiffy , ini juga berjalan di atas Intl , tetapi membuatnya lebih mudah menggunakan sintaks momentjs . Lihat di bawah

import 'package:jiffy/jiffy.dart';   

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

Anda juga dapat melakukan hal berikut

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

Dan Anda juga bisa meneruskan objek DateTime Anda, string dan array

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
sumber
6

ada beberapa perubahan sejak 0,16 jadi di sini bagaimana saya melakukannya,

impor di pubspec.yaml

dependencies:
      flutter:
        sdk: flutter
      intl: ^0.16.1

lalu gunakan

  txdate= DateTime.now()


  DateFormat.yMMMd().format(txdate)
asli
sumber
6

Inilah solusi sederhana saya. Itu tidak membutuhkan ketergantungan apa pun.

Namun, tanggalnya akan dalam format string. Jika Anda menginginkan waktu, ubah nilai substring

print(new DateTime.now()
            .toString()
            .substring(0,10)
     );   // 2020-06-10
zizutg
sumber
Ini bekerja dengan baik tanpa paket apa pun. Di bawah ini adalah cara melakukannya. DateTime now = DateTime.now (); DateTime date = DateTime baru (now.year, now.month, now.day); cetak (date.toString (). substring (0, 10));
Raju Gupta
4

Gunakan fungsi ini

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

Keluaran:

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

Anda juga dapat menggunakan sintaks ini. Untuk YYYY-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
sumber
Ini tidak menambahkan padding yang benar untuk "yyyy-MM-dd" yang sebenarnya
01000101
1

Gunakan metode String split untuk menghapus: 00.000

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

======= ATAU GUNAKAN kode DI BAWAH untuk YYYY-MM-DD HH: MM: format SS tanpa menggunakan library ====

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