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?

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

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

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


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

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)

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

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

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

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]}";
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.