如何在Flutter中格式化DateTime,如何在Flutter中获取当前时间?


113

我试图在点击按钮后DateTimeText小部件中显示当前。下面的作品,但我想更改格式。

目前的方法

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零件?

Answers:


243

您可以使用DateFormat国际包装。

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

国际包装的收视率非常低
Aseem '19

是否有人在初始化程序中无法访问该静态成员?
MrPool

@MrPool是的,不能在初始化程序中访问与静态成员相同的问题。非常令人沮丧,因为将日期设为静态是没有意义的。
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小时制返回非美国标准时间。算术....叹息......算了吧,我就把包
阿米尔梅蒙

外部依赖关系有什么问题?那就是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日期=新的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

您也可以使用此语法。对于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,2005年

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]}";
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.