วิธีจัดรูปแบบ DateTime ใน Flutter วิธีรับเวลาปัจจุบันใน Flutter


115

ฉันพยายามแสดงกระแสDateTimeในTextวิดเจ็ตหลังจากแตะที่ปุ่ม ต่อไปนี้ใช้งานได้ แต่ฉันต้องการเปลี่ยนรูปแบบ

แนวทางปัจจุบัน

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

ผลลัพธ์

YYYY-MM-JJ HH-MM:00.000

คำถาม

ฉันจะเอาชิ้น:00.000ส่วนออกได้อย่างไร?

คำตอบ:


245

คุณสามารถใช้DateFormatจากแพ็คเกจintl

import 'package:intl/intl.dart';

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

52
อย่าลืมเพิ่มการintl: 0.15.7พึ่งพาให้กับpubspec.yamlไฟล์ของคุณ รุ่นล่าสุดของห้องสมุดสามารถพบได้ที่นี่
Defuera

แพ็คเกจ intl มีเรตติ้งต่ำมาก
Aseem

มีใครรับสมาชิกคงที่ไม่สามารถเข้าถึงได้ใน initializers?
MrPool

@MrPool ใช่ปัญหาเดียวกันกับสมาชิกแบบคงที่ไม่สามารถเข้าถึงได้ใน initializers น่าผิดหวังมากเพราะการมีวันที่คงที่ไม่สมเหตุสมผล
Michael Tolsma

2
หากคุณต้องการใช้ภาษาเฉพาะคุณสามารถใช้เช่น: DateFormat.yMd(myLocale.languageCode).format(now)ที่คุณได้รับตำแหน่งอุปกรณ์ปัจจุบันเช่นนี้:Locale myLocale = Localizations.localeOf(context)
Zsolt

46

เพิ่มintl แพ็คเกจลงในpubspec.yamlไฟล์ของคุณ

import 'package:intl/intl.dart';

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

การแปลงวัตถุ DateTime เป็น String

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

การแปลง String เป็นวัตถุ DateTime

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

21

ด้วยแนวทางนี้ไม่จำเป็นต้องนำเข้าไลบรารีใด ๆ

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

เอาต์พุต

2020-12-05 14:57 น


5
นอกจากเส้นประที่ขาดหายไปนี่เป็นวิธีที่ดีที่สุดโดยไม่ต้องเพิ่มการพึ่งพาอื่น
01000101

1
นี่เป็นสิ่งที่ดี แต่ชั่วโมงกำลังส่งคืนเวลาที่ไม่ใช่ของสหรัฐอเมริกาในนาฬิกาแบบ 24 ชั่วโมง เลขคณิต .... ถอนหายใจ ... ลืมไปฉันจะได้รับแพ็คเกจ
Amir Memon

ปัญหาเกี่ยวกับการอ้างอิงภายนอกคืออะไร? นั่นคือวิธีการทำงานในปี 2020 :-)
funder7

13

ลองใช้แพ็คเกจนี้JiffyมันทำงานบนIntlด้วย แต่ทำให้การใช้ไวยากรณ์momentjsง่ายขึ้น ดูด้านล่าง

import 'package:jiffy/jiffy.dart';   

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

คุณยังสามารถทำสิ่งต่อไปนี้

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

และคุณยังสามารถส่งผ่านวัตถุ DateTime, สตริงและอาร์เรย์ได้อีกด้วย

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

มีการเปลี่ยนแปลงบางอย่างตั้งแต่ 0.16 ดังนั้นฉันทำอย่างไร

นำเข้าใน pubspec.yaml

dependencies:
      flutter:
        sdk: flutter
      intl: ^0.16.1

จากนั้นใช้

  txdate= DateTime.now()


  DateFormat.yMMMd().format(txdate)

6

นี่คือวิธีง่ายๆของฉัน ที่ไม่ต้องการการพึ่งพาใด ๆ

อย่างไรก็ตามวันที่จะอยู่ในรูปแบบสตริง หากคุณต้องการเวลาให้เปลี่ยนค่าสตริงย่อย

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

ใช้งานได้ดีโดยไม่มีแพ็คเกจใด ๆ ด้านล่างนี้คือวิธีการทำ DateTime now = DateTime.now (); DateTime date = DateTime ใหม่ (now.year, now.month, now.day); พิมพ์ (date.toString (). สตริงย่อย (0, 10));
Raju Gupta

4

ใช้ฟังก์ชันนี้

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

เอาท์พุต:

08:41:AM
21-12-2019

2

คุณยังสามารถใช้ไวยากรณ์นี้ สำหรับ 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}';

นี่ไม่ได้เพิ่มช่องว่างที่ถูกต้องสำหรับ "yyyy-MM-dd" จริง
01000101

1

ใช้วิธีแยกสตริงเพื่อลบ: 00.000

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

======= หรือใช้รหัสด้านล่างสำหรับ YYYY-MM-DD HH: MM: รูปแบบ SS โดยไม่ต้องใช้ไลบรารี ====

var stringList =  DateTime.now().toIso8601String().split(new RegExp(r"[T\.]"));
var formatedDate = "${stringList[0]} ${stringList[1]}";
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.