如何在Flutter中获取时间归零的DateTime

问题描述 投票:0回答:3

我是 Flutter 新手,我正在尝试以 UTC 格式输出当天的开始时间。 我使用 Flutter 3.3.7 和 Dart SDK 2.18.4。

首先,我选择当前日期。

DateTime dt = DateTime.now();

接下来,我使用我自己实现的 DateTime 类的扩展。

extension DateTimeFromTimeOfDay on DateTime {
  DateTime appliedFromTimeOfDay(TimeOfDay timeOfDay) {
    return DateTime(year, month, day, timeOfDay.hour, timeOfDay.minute);
  }
}

它输出相同的日期,只是我通过 TimeOfDay 类传递它的时间(在本例中为 00:00)。

dt = dt.appliedFromTimeOfDay(const TimeOfDay(hour: 0, minute: 0));
  print(dt.toUtc()); //2022-11-08 21:00:00.000Z

但是当我运行此代码时,它输出一个时间非零的日期。

我还尝试将 toUtc() 方法添加到扩展中。

extension DateTimeFromTimeOfDay on DateTime {
  DateTime appliedFromTimeOfDay(TimeOfDay timeOfDay) {
    return DateTime(year, month, day, timeOfDay.hour, timeOfDay.minute).toUtc();
  }
}

那也没用。

如何获取 UTC 格式的日期时间(一天中的时间归零)?例如, 2022-11-08 00:00:00.000Z

flutter dart datetime
3个回答
1
投票

DateTime
有一个
utc
构造函数可以让你做到这一点。

extension DateTimeFromTimeOfDay on DateTime {
  DateTime appliedFromTimeOfDay(TimeOfDay timeOfDay) {
    return DateTime.utc(year, month, day, timeOfDay.hour, timeOfDay.minute);
  }
}

DateTime today = DateTime.now()
  .appliedFromTimeOfDay(const TimeOfDay(hour: 0, minute: 0)); // output: 2022-11-09 00:00:00.000Z (note the Z which indicate UTC)

1
投票

尝试一下这个扩展方法

extension DateTimeExtension on DateTime {
    DateTime getDateOnly() {
        return DateTime(this.year, this.month, this.day);
    }
}

0
投票

您可以使用DateUtils.dateOnly

import 'package:flutter/material.dart';

DateTime dateTime = DateTime.now(); // 2024-01-01 01:23:45.123456
DateTime dateOnly = DateUtils.dateOnly(dateTime); // 2024-01-01 00:00:00.000
© www.soinside.com 2019 - 2024. All rights reserved.