简体   繁体   English

Java - 从工作日的数量转换为天数

[英]Java — convert from number of weekdays to number of days

This is similar to Calculating dates given two dates excluding weekend but a different problem. 这类似于计算两个日期的日期,不包括周末但是有不同的问题。

The question is "I was given a task N weekdays ago. How many days ago was this?" 问题是“我在工作日前有一个任务。这是多少天前的事了?”

On a Friday, 3 weekdays ago is 3 days ago. 星期五,3个工作日前是3天前。 On a Monday, 3 weekdays ago is 5 days ago. 星期一,3个工作日前是5天前。

I can write a very simple solution by iterating. 我可以通过迭代编写一个非常简单的解决方案。 However, it strikes me that it should be possible to do this as an O(1) operation. 但是,我觉得应该可以将其作为O(1)操作。 A close but wrong answer is N + (7/5)N. 一个接近但错误的答案是N +(7/5)N。 Any tips? 有小费吗?

This should work 这应该工作

 static int days(int weekdays){
      int nweeks = weekdays/5;
      int extra = weekdays%5;
      int[] daysPerWeekday = new int[]{<Something based on which day it is>};
      return nweeks*7 + daysPerWeekday[extra];
 }

(I didn't include the daysPerWeekday because it seemed like you had it ("On a Friday, 3 weekdays ago is 3 days ago. On a Monday, 3 weekdays ago is 5 days ago.")... (我没有包括daysPerWeekday,因为它好像你有它(“在星期五,3个工作日前是3天前。在星期一,3个工作日前是5天前。”)...

First convert even numbers of 5 days into 7 day weeks, then handle the remainder by adding two days if it will go over a weekend. 首先将偶数5天转换为7天,然后如果周末超过两天则再处理剩余时间。

int MONDAY = 1, TUESDAY = 2, WEDNESDAY = 3, THURSDAY = 4, FRIDAY = 5;
int today = getToday();
int weeks = weekdays / 5;
int extraDays = weekdays % 5;
int days = weeks * 7;
if (today <= extraDays) {
    days += 2;
}
days += extraDays;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM