0

我正在编写一个 Java 程序,它会自动生成一定数量的“单位”供用户执行(实际目的在这个问题中并不重要)。

我正在努力寻找一种好方法来确定下周要为用户提供多少这些“单位”。

计算意图:

  • 给出特定周的“单位”
  • 根据一周中的实际日期(周一至周五)计算一周的单位
  • 占当月所有单位(例如,如果是该月的最后一周,则给出整周所有可能的单位)
  • 如果估计,应该高估(由于程序的性质,低估会更糟。)
  • 单位不能是小数(因此转换为 int)

我有的变量:

  • 当月要做的“单位”数量

我尝试以几种不同的方式做到这一点,到目前为止,我最好的方法是:

 public static int getRemainingUnitsThisWeek() {
    return (int) Math.round(((double) getUnitsThisMonth() / (((30 - (double) DateTime.now().getDayOfMonth()+1) / 7) < 1 ? 1 :
            ((30 - (double) DateTime.now().getDayOfMonth()+1) / 7))) / (double)DateTime.now().getDayOfWeek());
 }

我最终遇到的问题(具体来说,我仍然不满意它是如何做到的)是在每月最后一周给出的“单位”中仍然除以星期几(这反过来每天给你一个低得多的数字——即使用户需要在月底之前收到所有的“单位”)。

您可能有任何问题,尽管问!

PS。我在 DateTime.now() 函数中使用的库是joda-time

4

2 回答 2

0

你的描述很混乱,所以我不确定我能不能直接回答。相反,我将回答一个不同的问题,这可能会有所帮助:

我有一堆单元要做,这个月剩下的时间要做。我今天应该做多少?

我不了解 Joda,但使用标准DateAPI,您可以使用此答案来获取Date表示月底的 a,类似的技术来获取Date表示今天结束的 a,并new Date()获取当前时间。然后减去他们getTime()的 s。然后,您现在可以分配您的单位,因为您知道一天结束和月末的毫秒数。

units_today = total_units_to_do * milliseconds_to_end_of_today /
  milliseconds_to_end_of_month;
于 2012-08-29T04:20:55.153 回答
0

我不懂java,所以我不会尝试写代码,但我建议你从计算daysLeftInMonth和开始daysLeftInWeek。一旦你让它们完美地工作,你有两个简单的情况:一个月将在一周之前结束,或者它不会。

在第一种情况下,算法的其余部分是微不足道的。第二步,计算每天应该有多少单位(四舍五入),然后乘以一周中剩余的天数。

于 2012-08-29T04:22:16.990 回答