【问题标题】:How to only change the time in DateTime?如何仅更改 DateTime 中的时间?
【发布时间】:2020-12-25 10:53:57
【问题描述】:

我有一个DateTime,我正在尝试用它做两件事。 1:只更新日期和月份。 2:只更新时间。我怎样才能做到这一点?

  DateTime currentDateTime = DateTime.now();

  void updateTime(DateTime newTime) {
       currentDateTime = ?
  }
  void updateDate(DateTime newTime) {
       currentDateTime = ?
  }

有什么办法可以像DateTime(...currentDateTime, ..newTime)一样破坏currentDateTime

【问题讨论】:

标签: flutter dart


【解决方案1】:

要仅更新时间,您可以使用TimeOfDay。这是我可以做的方法

DateTime currentDateTime = DateTime.now();

void updateTime(TimeOfDay newTime) {
  // 2020-09-07 09:03:24.469
  TimeOfDay time = TimeOfDay(hour: newTime.hour, minute: newTime.minute);
  currentDateTime = DateTime(currentDateTime.year, currentDateTime.month, currentDateTime.month, time.hour, time.minute);
  // 2020-09-09 15:00:00.000
}

void updateDate(DateTime newTime) {
  // 2020-09-09 15:00:00.000
  currentDateTime = DateTime(newTime.year, newTime.month, newTime.day);
  // 2021-01-01 00:00:00.000
}

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    从 Datetime.now() 属性构建您的 Datetime 对象,而不是整个 Datetime.now() 对象。这应该可以。

      DateTime currentDateTime = DateTime.now();
    
      void updateTime(DateTime currentDateTime, DateTime newTime) {
           currentDateTime = DateTime(
             year: currentDateTime.year,
             month: currentDateTime.month
             day: currentDateTime.day,
             hour: newTime.hour,
             minute: newTime.minute,
             second: newTime.second,
           );
      }
    
      void updateDate(DateTime currentDateTime, DateTime newDate) {
           currentDateTime = DateTime(
             year: currentDateTime.year,
             month: newTime.month
             day: newTime.day,
             hour: currentDateTime.hour,
             minute: currentDateTime.minute,
             second: currentDateTime.second,
           );
      }
    

    记住 Datetime 的构造函数是这样的

    DateTime(int year, [int month = 1, int day = 1, int hour = 0, int minute = 0, int second = 0, int millisecond = 0, int microsecond = 0])
    

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 2011-05-26
      相关资源
      最近更新 更多