如何将flutter TimeOfDay转换为DateTime?

rta7y2nd  于 2022-11-25  发布在  Flutter
关注(0)|答案(5)|浏览(278)

我有一个返回TimeOfDay对象的时间选择器。但是我必须将该值作为从DateTime.millisecondsSinceEoch获得的毫秒整数保存在数据库中。我该如何实现呢?

ru9i0ody

ru9i0ody1#

这是不可能的。TimeOfDay * 仅 * 包含小时和分钟。而DateTime还包含日/月/年
如果你想转换它,你将需要更多的信息。比如当前的日期时间。然后将两者合并成一个最终的日期时间。

TimeOfDay t;
final now = new DateTime.now();
return new DateTime(now.year, now.month, now.day, t.hour, t.minute);
vtwuwzda

vtwuwzda2#

您可以使用DateTime扩展

extension DateTimeExtension on DateTime {
  DateTime applied(TimeOfDay time) {
    return DateTime(year, month, day, time.hour, time.minute);
  }
}

那么您可以这样使用它:
final dateTime = yourDate.applied(yourTimeOfDayValue);
并将pubspec.yaml中sdk版本更改为

environment:
 sdk: ">=2.7.0 <3.0.0"
watbbzwu

watbbzwu3#

您可以像这样使用扩展,也可以在单独的文件(如dateTime_extensions.dart)中添加更多的扩展方法,以使您的工作更易于将来的项目
文件名:日期时间扩展名.dart;

extension DateTimeExtension on DateTime {
DateTime setTimeOfDay(TimeOfDay time) {
    return DateTime(this.year, this.month, this.day, time.hour, time.minute);
  }

  DateTime setTime(
      {int hours = 0,
      int minutes = 0,
      int seconds = 0,
      int milliSeconds = 0,
      int microSeconds = 0}) {
    return DateTime(this.year, this.month, this.day, hours, minutes, seconds,
        milliSeconds, microSeconds);
  }

  DateTime clearTime() {
    return DateTime(this.year, this.month, this.day, 0, 0, 0, 0, 0);
  }

   ///..... add more methods/properties for your convenience 
}

这样使用

import 'package:your_app/dateTime_extensions.dart';

    date.clearTime(); //to clear timeSpan
    date.setTime(); //also be used to clear time if you don't provide any parameters
    date.setTime(hours: 16,minutes: 23,seconds: 24); // will set time to existing date eg. existing_date 16:23:24
    date.setTimeOfDay(TimeOfDay(hour: 16, minute: 59));
ar5n3qh5

ar5n3qh54#

下面是一个连接DateTimeHourOfDay的小方法:

DateTime join(DateTime date, TimeOfDay time) {
  return new DateTime(date.year, date.month, date.day, time.hour, time.minute);
}
yacmzcpb

yacmzcpb5#

您可以在TimeOfDay类别上设定副档名:

extension TOD on TimeOfDay {
  DateTime toDateTime() {
    return DateTime(1, 1, 1, hour, minute);
  }
}

然后按如下方式使用它:

TimeOfDay timeOfDay = TimeOfDay.now();

DateTime dateTimeOfDay = timeOfDay.toDateTime();

如果你在另一个文件中定义了扩展名,并且你还没有导入它,如果你使用的是vsc,你可以只输入timeOfDay.toDateTime();,然后ctrl + .vsc将建议导入该文件。如果你没有使用vsc,那么我猜你必须手动导入扩展名的文件。

相关问题