Cách định dạng DateTime trong Flutter


104

Tôi đang cố gắng hiển thị dòng điện DateTimetrong Texttiện ích con sau khi nhấn vào một nút. Các cách sau hoạt động, nhưng tôi muốn thay đổi định dạng.

Phương cách hiện hành

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

Kết quả

YYYY-MM-JJ HH-MM:00.000

Câu hỏi

Làm thế nào tôi có thể loại bỏ :00.000một phần?

Câu trả lời:


230

Bạn có thể sử dụng DateFormattừ gói intl .

import 'package:intl/intl.dart';

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

50
Đừng quên thêm intl: 0.15.7phụ thuộc vào pubspec.yamltệp của bạn . Phiên bản mới nhất của thư viện có thể được tìm thấy tại đây .
Defuera

gói intl có xếp hạng rất thấp
Aseem

Bất kỳ ai khác nhận được rằng các thành viên tĩnh không thể được truy cập trong trình khởi tạo?
MrPool

@MrPool Có, không thể truy cập vấn đề tương tự với các thành viên tĩnh trong trình khởi tạo. Rất khó chịu vì có ngày tĩnh không có ý nghĩa gì.
Michael Tolsma

2
Nếu bạn muốn sử dụng một ngôn ngữ cụ thể, bạn có thể sử dụng ví dụ: DateFormat.yMd(myLocale.languageCode).format(now)nơi bạn có được ngôn ngữ thiết bị hiện tại như sau:Locale myLocale = Localizations.localeOf(context)
Zsolt

40

Thêm intl gói vào pubspec.yamltệp của bạn .

import 'package:intl/intl.dart';

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

Chuyển đổi đối tượng DateTime thành Chuỗi

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

Chuyển đổi chuỗi thành đối tượng DateTime

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

18

Với cách tiếp cận này, không cần nhập bất kỳ thư viện nào.

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
Bên cạnh dấu gạch ngang bị thiếu, đây là cách tốt nhất để đi mà không cần thêm phụ thuộc nào khác.
01000101

1
Điều này là tốt nhưng giờ đang trả về thời gian không phải của Hoa Kỳ trên đồng hồ 24 giờ. Số học .... thở dài ... quên nó đi, tôi sẽ chỉ nhận được gói hàng
Amir Memon

13

Hãy thử gói này, Jiffy , nó cũng chạy trên Intl , nhưng làm cho nó dễ dàng hơn bằng cách sử dụng cú pháp momentjs . Xem bên dưới

import 'package:jiffy/jiffy.dart';   

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

Bạn cũng có thể làm như sau

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

Và bạn cũng có thể chuyển đối tượng DateTime của mình, một chuỗi và một mảng

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

có một số thay đổi kể từ 0,16 nên đây là cách tôi đã làm,

nhập trong pubspec.yaml

dependencies:
      flutter:
        sdk: flutter
      intl: ^0.16.1

sau đó sử dụng

  txdate= DateTime.now()


  DateFormat.yMMMd().format(txdate)

4

Đây là giải pháp đơn giản của tôi. Điều đó không yêu cầu bất kỳ sự phụ thuộc nào.

Tuy nhiên, ngày sẽ ở định dạng chuỗi. Nếu bạn muốn thời gian thì hãy thay đổi các giá trị chuỗi con

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

2

Sử dụng chức năng này

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

Đầu ra:

08:41:AM
21-12-2019

2

Bạn cũng có thể sử dụng cú pháp này. Đối với 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}';

Điều này không thêm đệm chính xác cho "yyyy-MM-dd" thực
01000101

1

Sử dụng phương pháp tách chuỗi để loại bỏ: 00.000

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

======= HOẶC SỬ DỤNG mã DƯỚI ĐÂY cho định dạng YYYY-MM-DD HH: MM: SS mà không cần sử dụng thư viện ====

var stringList =  DateTime.now().toIso8601String().split(new RegExp(r"[T\.]"));
var formatedDate = "${stringList[0]} ${stringList[1]}";
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.