如何在Flutter中格式化DateTime

时间:2018-07-29 10:54:30

标签: dart flutter

点击按钮后,我试图在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”

13 个答案:

答案 0 :(得分:31)

使用LinearLayout parentLayout = (LinearLayout) findViewById(R.id.parent_layout); parentLayout.addView(rootView);

DateFormat

答案 1 :(得分:19)

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

long long int

输出

2020-12-05 14:57

答案 2 :(得分:6)

从0.16开始有一些变化,所以我在这里做了什么

导入pubspec.yaml

dependencies:
      flutter:
        sdk: flutter
      intl: ^0.16.1

然后 使用

  txdate= DateTime.now()


  DateFormat.yMMMd().format(txdate)

答案 3 :(得分:6)

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

但是,日期将为字符串格式。如果需要时间,请更改子字符串值

# List all hosts:
hosts="$(jboss-cli.sh -c --controller=servername:9990 --command=":read-children-names(child-type=host)" | grep "        " | awk '{print $1}' | sed 's/,//g' | sed 's/"//g')"
# Loop through hosts results:
for host in $hosts
{       
        #List all servers:
        servers="$(jboss-cli.sh -c --controller=servername:9990 --command="/host=$host:read-children-names(child-type=server)" | grep "        " | awk '{print $1}' | sed 's/,//g' | sed 's/"//g')"
        # Loop through server results:
        for server in $servers
        {
            # check if server is running:
            serverstate=$(jboss-cli.sh -c --controller=servername:9990 --command="/host=$host/server=$server:read-attribute(name=server-state)" | grep "result" | awk '{print $3}' | sed 's/"//g')

            if [ $serverstate = "running" ]
            then
                #Do a check etc. etc.
            fi
        }       
}

答案 4 :(得分:4)

尝试使用此软件包Jiffy,它也可以在Intl之上运行,但是使用momentjs语法可以使其更容易。见下文

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

答案 5 :(得分: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}';

答案 6 :(得分: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]}";

答案 7 :(得分:1)

如果用户是美国公民但想以 24 小时格式查看所有内容怎么办 - 那么
显示基于区域设置的 12/24 小时不会满足用户

<exceptions>
    <exception
            package="com.google.android.apps.pixelmigrate">
        <!-- External storage -->
        <permission name="android.permission.READ_EXTERNAL_STORAGE" fixed="false"/>
        <permission name="android.permission.WRITE_EXTERNAL_STORAGE" fixed="false"/>
        <!-- Contacts -->
        <permission name="android.permission.READ_CONTACTS" fixed="false"/>
        <permission name="android.permission.WRITE_CONTACTS" fixed="false"/>
        <!-- Call logs -->
        <permission name="android.permission.READ_CALL_LOG" fixed="false"/>
        <permission name="android.permission.WRITE_CALL_LOG" fixed="false"/>
        <!-- SMS -->
        <permission name="android.permission.RECEIVE_SMS" fixed="false"/>
        <permission name="android.permission.READ_PHONE_NUMBERS" fixed="false"/>
    </exception>
</exceptions>

答案 8 :(得分:0)

这可能无法回答您的问题,但是要格式化日期,您需要将sub.domain.org package添加到intl文件中。

pubspec.yaml

将DateTime对象转换为String

import 'package:intl/intl.dart';

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

将字符串转换为DateTime对象

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

答案 9 :(得分:0)

使用此功能

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

答案 10 :(得分:0)

DateTime.now() 已弃用,请改用 clock.now():

import 'package:clock/clock.dart';

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

答案 11 :(得分:0)

DateTime简单扩展方法怎么样。运行时可能不是很好,因为我们多次迭代字符串并迭代每个 % 格式选项。可能会遍历一次并贪婪地替换 %

extension DateTimeFormat on DateTime {

  /// Supports the following, inspired by: https://linux.die.net/man/3/strptime
  /// %Y: The year, including century (for example, 1991).
  /// %m: The month number (1-12).
  /// %d: The day of month (1-31).
  /// %H: The hour (0-23).
  /// %M: The minute (0-59).
  /// %S: The second (0-59).
  String format(String formatString) {
    var hourString = hour.toString();
    var dayString = day.toString();
    var monthString = month.toString();
    var minuteString = minute.toString();
    var secondString = second.toString();
    var yearString = year.toString();

    var map = {
      '%H': hourString.padLeft(3 - hourString.length, '0'), // the pad values here are the desired length + 1
      '%d': dayString.padLeft(3 - dayString.length, '0'),
      '%m': monthString.padLeft(3 - monthString.length, '0'),
      '%M': minuteString.padLeft(3 - minuteString.length, '0'),
      '%S': secondString.padLeft(3 - secondString.length, '0'),
      '%Y': yearString.padLeft(5 - yearString.length, '0'),
    };
    return map.entries.fold(formatString, (acc, entry) => acc.replaceAll(entry.key, entry.value));
  }
}

用法:

print(DateTime(2021, 10, 16, 4, 4, 4, 4, 4).format('%Y-%m-%d-%H-%M-%S'));
// '2021-10-16-04-04-04'

随时提出更改建议。

答案 12 :(得分:-1)

您可以使用parse flutter方法进行字符串格式化,而不必每次都重写它。例如,查看月/日/年,这是方法:

DateFormat().add_yMd().format("your date");