Como alterar apenas a hora em DateTime?

Sep 07 2020

Eu tenho um DateTimee estou tentando fazer duas coisas com ele. 1: Atualize apenas a data e o mês. 2: Atualize apenas a hora. Como posso conseguir isso?

  DateTime currentDateTime = DateTime.now();

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

Existe alguma maneira de destruir coisas currentDateTimesemelhantesDateTime(...currentDateTime, ..newTime)

Respostas

lenz Sep 07 2020 at 12:10

Construa seu objeto Datetime a partir das propriedades Datetime.now (), em vez de todo o objeto Datetime.now (). Isso deve funcionar.

  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,
       );
  }

Lembre-se de que o construtor de data e hora se parece com este

DateTime(int year, [int month = 1, int day = 1, int hour = 0, int minute = 0, int second = 0, int millisecond = 0, int microsecond = 0])
AldyYuan Sep 07 2020 at 09:06

Para atualizar apenas o tempo que você pode usar TimeOfDay. Esta é a abordagem que posso fazer

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
}

Espero que isto seja útil.