DateTimeをFlutterでフォーマットする方法、現在の時刻を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部品を取り外すことができますか?

回答:


242

intlパッケージ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 2018年

国際パッケージには、非常に低い評価を持っている
Aseem

その静的メンバーを初期化子でアクセスできないようにしている他の人はいますか?
MrPool

@MrPoolはい、静的メンバーに関する同じ問題に初期化子でアクセスすることはできません。日付を静的にするのは意味がないため、非常にイライラします。
MichaelTolsma20年

2
特定のロケールを使用する場合は、たとえばDateFormat.yMd(myLocale.languageCode).format(now)、次のように現在のデバイスロケールを取得する場所を使用できます。Locale myLocale = Localizations.localeOf(context)
Zsolt20年

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
ダッシュがないことに加えて、これはさらに別の依存関係を追加せずに進むための最良の方法です。
010001 0120年

1
これは良いことですが、時間は24時間制で米国以外の標準時間を返しています。算数....ため息...それを忘れて、私はただパッケージを手に入れます
AmirMemon20年

外部依存関係の問題は何ですか?それが2020
仕組みです:

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 = new DateTime(now.year、now.month、now.day); print(date.toString()。substring(0、10));
RajuGupta20年

3

この機能を使用する

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」の正しいパディングを追加しません
010001 0120年

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.