计算一周的单位价值

时间:2012-08-29 01:50:29

标签: java algorithm datetime methods

我正在编写一个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

2 个答案:

答案 0 :(得分:0)

您的描述令人困惑,所以我不确定我是否可以直接回答。相反,我会回答一个不同的问题,这可能有所帮助:

  

我有一堆单位要做,其余的时间要做。   我今天要做多少?

我不了解Joda,但使用标准的Date API,您可以使用this answer来获得代表月末的Date,这是一种类似的技巧表示今天结束的Datenew Date()表示当前时间。然后减去他们的getTime() s。然后,您可以分析您的单位,因为您知道当天结束时和月末会有多少毫秒。

units_today = total_units_to_do * milliseconds_to_end_of_today /
  milliseconds_to_end_of_month;

答案 1 :(得分:0)

我不懂java,所以我不会尝试编写代码,但我建议您先计算daysLeftInMonthdaysLeftInWeek。一旦你完美地完成了这些工作,你有两个简单的案例:月份将在一周之前结束,否则就不会。

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