Як відформатувати 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файлу. Останню версію бібліотеки можна знайти тут .
Дефуера

міжнар пакет має дуже низький рейтинг
Асім

Хтось інший, хто отримує статичні члени, не може бути доступний в ініціалізаторах?
MrPool

@MrPool Так, та сама проблема зі статичними членами не може бути доступна в ініціалізаторах. Дуже засмучує, тому що статична дата не має сенсу.
Майкл Толсма

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 = dateFormat.format(DateTime.now());

Перетворення рядка в об'єкт 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
Це добре, але година повертає неамериканський стандартний час за цілодобовим годинником. Арифметика .... зітхай ... забудь, я просто дістану пакет
Амір Мемон

У чому проблема зовнішніх залежностей? Ось як все працює в 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 зараз = DateTime.now (); DateTime date = новий DateTime (now.year, now.month, now.day); print (date.toString (). substring (0, 10));
Раджу Гупта,

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

Ви також можете використовувати цей синтаксис. Для РРРР-ММ-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}';

Це не додає правильного заповнення для справжнього "рррр-ММ-дд"
01000101,

1

Використовуйте метод розділення рядків для видалення: 00.000

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

======= АБО ВИКОРИСТОВУВАТИ НИЖЧЕ код для РРРР-ММ-ДД ЧЧ: ММ: формат SS без використання бібліотеки ====

var stringList =  DateTime.now().toIso8601String().split(new RegExp(r"[T\.]"));
var formatedDate = "${stringList[0]} ${stringList[1]}";
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.