如何在Flutter中格式化DateTime

Nit*_*euq 30 datetime dart flutter

我试图显示当前DateTimeText按钮后丝锥.目前它的工作原理,但我想改变格式

我用

DateTime now = DateTime.now();
currentTime = new DateTime(now.year, now.month, now.day, now.hour, now.minute);
Run Code Online (Sandbox Code Playgroud)
 Text('$currentTime'), 
Run Code Online (Sandbox Code Playgroud)

结果是:YYYY-MM-JJ HH-MM:00.000

我不知道如何删除":00.000"

bof*_*mer 76

用途DateFormat:

import 'package:intl/intl.dart';

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

  • 不要忘记将`intl:0.15.7`依赖项添加到`pubspec.yaml`文件中.最新版本的库可以在[这里](https://pub.dartlang.org/packages/intl)找到. (27认同)
  • 如果您想使用特定的区域设置,您可以使用例如:`DateFormat.yMd(myLocale.languageCode).format(now)`,您可以在其中获取当前设备区域设置,如下所示:`Locale myLocale = Localizations.localeOf(context) ` (2认同)

Qui*_*ner 40

使用这种方法,无需导入任何库。

DateTime now = DateTime.now();

String convertedDateTime = "${now.year.toString()}-${now.month.toString().padLeft(2,'0')}-${now.day.toString().padLeft(2,'0')} ${now.hour.toString().padLeft(2,'0')}-${now.minute.toString().padLeft(2,'0')}";
Run Code Online (Sandbox Code Playgroud)

输出

2020-12-05 14:57

  • 除了缺少的破折号之外,这是无需添加另一个依赖项的最佳方法。 (6认同)
  • 这是在不添加包的情况下的理想选择。唯一的问题是我认为你需要将 `padLeft(2,'0')` 添加到分钟字段,否则 14:07 将显示为 14:7 (3认同)
  • @funder7 - 您添加的每个外部依赖项都是代码库中潜在的故障点。依赖关系由第三方维护 - 因此您绝对无法保证每次迭代(即版本更改)时该第三方代码的功能和稳定性。因此,明智的做法是在生产代码中尽可能减少依赖项。 (2认同)

Jam*_*med 16

试试这个包,Jiffy,它也运行在Intl之上,但使用momentjs语法更容易。见下文

import 'package:jiffy/jiffy.dart';   

var now = Jiffy().format("yyyy-MM-dd HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)

您还可以执行以下操作

var a = Jiffy().yMMMMd; // October 18, 2019
Run Code Online (Sandbox Code Playgroud)

你也可以传入你的 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
Run Code Online (Sandbox Code Playgroud)


Bru*_*nuk 10

您可以使用DateTime.now()clock.now()。带时钟库的示例:

\n
import 'package:clock/clock.dart';\n\nDateTime now = clock.now();\nString formattedDate = DateFormat('yyyy-MM-dd \xe2\x80\x93 kk:mm').format(now);\n
Run Code Online (Sandbox Code Playgroud)\n

  • `DateTime.now()` 并未被弃用。https://api.flutter.dev/flutter/dart-core/DateTime-class.html (5认同)

ziz*_*utg 9

这是我的简单解决方案。这不需要任何依赖。

但是,日期将采用字符串格式。如果您想要时间,请更改子字符串值

print(new DateTime.now()
            .toString()
            .substring(0,10)
     );   // 2020-06-10
Run Code Online (Sandbox Code Playgroud)


Cop*_*oad 7

intl 添加到您的pubspec.yaml文件。

import 'package:intl/intl.dart';

DateFormat dateFormat = DateFormat("yyyy-MM-dd HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)

将DateTime对象转换为String

String string = dateFormat.format(DateTime.now());
Run Code Online (Sandbox Code Playgroud)

将String转换为DateTime对象

DateTime dateTime = dateFormat.parse("2019-07-19 8:40:23");
Run Code Online (Sandbox Code Playgroud)


asl*_*sli 7

自 0.16 以来有一些变化,所以我是这样做的,

导入 pubspec.yaml

dependencies:
      flutter:
        sdk: flutter
      intl: ^0.16.1
Run Code Online (Sandbox Code Playgroud)

然后使用

  txdate= DateTime.now()


  DateFormat.yMMMd().format(txdate)
Run Code Online (Sandbox Code Playgroud)


Jea*_*cio 7

您也可以使用此语法。对于 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}';
Run Code Online (Sandbox Code Playgroud)


Sil*_*der 6

使用这个功能

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);
  }
Run Code Online (Sandbox Code Playgroud)

输出:

08:41:AM
21-12-2019
Run Code Online (Sandbox Code Playgroud)


小智 6

如果用户是美国公民,但希望以 24 小时格式查看所有内容,该怎么办 - 那么
基于区域设置显示 12/24 小时将无法满足用户

 // getting system settings 12/24 h format
      if (MediaQuery.of(context).alwaysUse24HourFormat){
        timeFormat = new DateFormat("kk:mm", languageCode); //24h format
      }
      else{
        timeFormat = new DateFormat("KK:mm a", languageCode); //12h format
      }
//then use it:
 '${timeFormat.format DateTime.now())}'
Run Code Online (Sandbox Code Playgroud)


小智 5

使用字符串分割方法删除 :00.000

var formatedTime = currentTime.toString().split(':')
Text(formatedTime[0])
Run Code Online (Sandbox Code Playgroud)

======= 或使用下面的 YYYY-MM-DD HH:MM:SS 格式代码而不使用库 ====

var stringList =  DateTime.now().toIso8601String().split(new RegExp(r"[T\.]"));
var formatedDate = "${stringList[0]} ${stringList[1]}";
Run Code Online (Sandbox Code Playgroud)


Rah*_*iya 5

static String convertDateFormat(String dateTimeString, String oldFormat, String 
           newFormat) {
        DateFormat newDateFormat = DateFormat(newFormat);
        DateTime dateTime = DateFormat(oldFormat).parse(dateTimeString);
        String selectedDate = newDateFormat.format(dateTime);
        return selectedDate;
            }
Run Code Online (Sandbox Code Playgroud)

这样调用这个方法

 convertDateFormat(inputDate, "dd-mm-yyyy", "d MMM yyyy");
Run Code Online (Sandbox Code Playgroud)