flutter Dart:合并日期和时间

e1xvtsh3  于 2022-12-14  发布在  Flutter
关注(0)|答案(2)|浏览(212)

我有一个简单的应用程序,我可以选择一个日期和时间:

这两个字段都返回DateTime对象。我正在寻找的是一个很好的实践,将日期和时间组合到一个新的DateTime对象中。
我所做的就是创建一个函数:

void combineDateAndTime({int? year, int? month, int? day, int? hour, int? min, int? sec}) {

  if (year != null) {
    dt = DateTime(
        year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.millisecond, dt.microsecond);
  }

  if (month != null) {
    dt = DateTime(
        dt.year, month, dt.day, dt.hour, dt.minute, dt.second, dt.millisecond, dt.microsecond);
  }

  if (day != null) {
    dt = DateTime(
        dt.year, dt.month, day, dt.hour, dt.minute, dt.second, dt.millisecond, dt.microsecond);
  }

  if (hour != null) {
    dt = DateTime(
        dt.year, dt.month, dt.day, hour, dt.minute, dt.second, dt.millisecond, dt.microsecond);
  }

  if (min != null) {
    dt = DateTime(
        dt.year, dt.month, dt.day, dt.hour, min, dt.second, dt.millisecond, dt.microsecond);
  }

  if (sec != null) {
    dt = DateTime(
        dt.year, dt.month, dt.day, dt.hour, sec, dt.second, dt.millisecond, dt.microsecond);
  }

}

通过选择一个日期,我调用函数:

combineDateAndTime(day: date.day, month: date.month, year: date.year);

选择时间:

combineDateAndTime(hour: date.hour, min: date.minute);

但我觉得应该有更好的解决办法。

ryevplcw

ryevplcw1#

您可以将combineDateAndTime更改为以下内容,而不是所有if条件:

void combineDateAndTime(
      {int? year, int? month, int? day, int? hour, int? min, int? sec}) {
    dt = DateTime(
        year ?? dt.year,
        month ?? dt.month,
        day ?? dt.day,
        hour ?? dt.hour,
        min ?? dt.minute,
        sec ?? dt.second,
        dt.millisecond,
        dt.microsecond);
  }
olqngx59

olqngx592#

当您取得Date时,请将它加入至DateTime变数,如下所示:

final pickedDay = await pickDay();
if (pickedDay == null) { return; } 
else { 
   final newEventDay = DateTime(
                pickedDay.year,
                pickedDay.month,
                pickedDay.day,
                dt.hour,
                dt.minute,
                dt.second);
   setState(() { dt = newEventDay; });
     }

然后,当您获得时间时,将其添加到变量中,如下所示:

final pickedTime = await pickTime();
if (pickedTime == null) { return; } 
else { 
   final newEventTime = DateTime(
                dt.year,
                dt.month,
                dt.day,
                pickedTime.hour,
                pickedTime.minute,
                pickedTime.second);
   setState(() { dt = newEventTime; });
     }

相关问题