如何查找从现在开始到特定工作日的最近的将来日期?

如何解决如何查找从现在开始到特定工作日的最近的将来日期?

我有一个约会管理方案,其中有一个availableWeekDays字段列表,该字段在工作日的工作日可以预订。例如,如果星期一有空,我在availableWeekDays列表中的值为1。

我使用DateTime将currentDate存储在DateTime.now()变量中。

我要做的是首先看一下今天的工作日是否与某人的availableWeekDay相匹配。如果是,则bookingDate有效,否则我必须与人的工作日一起寻找最近的将来日期。我尝试了以下解决方案,但由于我正在使用第一个索引,因此它可以工作一周。

void main() {
  
  DateTime bookingDate = DateTime.now();
  int availableWeekDays = [1,4,7];
  
  getDate(){
    if(bookingDate.weekday == availableWeekDays[0]){
      print("Available on $bookingDate ");
    } else {
      bookingDate = bookingDate.add(Duration(days: 1));
      getDate();
    }
  }
  
  getDate();
  
}

我想找到列表中所有工作日中最接近的将来日期。

解决方法

更有效的解决方案是:

DateTime getDate() {
  var currentDay = bookingDate.weekday;
  var offset = (availableWeekDay - currentDay).remainder(7);
  return offset == 0 ? bookingDate : bookingDate.add(Duration(days: offset));
}

请注意,如果bookingDate的时间接近午夜,则在日期上添加“天”(24小时的整数倍)可能会遇到夏令时问题。

,
DateTime findNearestWeekday(List<int> availableWeekdays) {
  assert(availableWeekdays.isNotEmpty);

  var date = DateTime.now();
  final weekday = date.weekday;

  for (var num in availableWeekdays) {
    if (num == date.weekday) {
      return date;
    } else if (date.weekday < num) {
      return date.add(Duration(days: num - weekday));
    }
  }

  /// I have assumed that you will always have a sorted list of available
  /// weekdays,in case you do not have a sorted list,either you can sort
  /// the list first or just use this line (instead of the last one),///
  /// ```dart
  /// import 'dart:math'; /// Add on Top of file.
  ///
  /// return date.add(Duration(days: 7 - weekday + availableWeekdays.reduce(min)))
  /// ```
  ///
  /// I will prefer to pre sort the array before storing it somewhere,/// because it will add an additional dependency dart:math


  return date.add(Duration(days: 7 - weekday + availableWeekdays[0]));
}
,

我忘记了将结果重新分配给变量。现在可以使用。

void main() {
  
  DateTime bookingDate = DateTime.now();
  int availableWeekDay = 1;
  
  getDate(){
    if(bookingDate.weekday == availableWeekDay){
      print("Available on $bookingDate ");
    } else {
      bookingDate = bookingDate.add(Duration(days: 1));
      getDate();
    }
  }
  
  getDate();
  
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?