Java - 获得给定的两周和当前两周之间的差异

时间:2011-08-22 06:15:53

标签: java date calendar

例如:
数据给出:

  1. 年份-2010,            月 - 2,            两星期-1

  2. 当前日期
  3. 如何在两个给定日期之间获得四分之一的差异?


    这是我想出来的,它的工作正常......

    Calendar c= Calendar.getInstance();
    int year = 2011;
    int month = 6;
    int fortnight = 1;
    int noofmonths=(c.get(Calendar.YEAR)-year)*12;  
    noofmonths=(noofmonths+((12-(month-1)+(c.get(Calendar.MONTH)-12)))-1)*2;
    int nooffortnights=noofmonths+((2-(fortnight-1)+((c.get(Calendar.DAY_OF_MONTH)<15?1:2)-2)))-1;
    System.out.println("nooffortnights : "+nooffortnights); //outputs 5
    

2 个答案:

答案 0 :(得分:2)

这取决于您对fortnights的定义。如果我们是字面意思,那么两周定义为14天,所以计算天数并除以14,完成工作。

我怀疑在你的情况下,我们实际上正在使用一个特殊的商业日历,其中四分之一是季度的细分,因此有一些特殊情况 - 一年并不完全分为四个星期,也许商业年度没有开始1月1日?所以在某个地方会有一个明确的一年中每两周开始日期的清单。

我们假设两周的定义有

 17th Nov - 1st Dec
 2nd Dec - 15th Dec
 16th Dec - 31st Dec   (note this is 15 days long)

现在11月17日到12月16日有多少个星期四的定义是什么?我想2.从11月19日到12月16日?我不知道你会期待什么答案。

首先,要明确了解业务需求。我会感到惊讶的是你会发现现成的日期套餐能够理解四夜,但即使你这样做,也需要仔细检查它们是否能提供你需要的答案。

答案 1 :(得分:0)

假设你想在没有任何第三方库的情况下这样做

制作2个Calendar个对象(两个都有给定的日期)。

Calendar c1 = Calendar.getInstance(),c2 = Calendar.getInstance();
        c1.add(Calendar.MONTH, 2);
        int fortnights = (int)((c1.getTimeInMillis() - c2.getTimeInMillis()) / (14L * 24 * 60 * 60 * 1000));
        System.out.println(fortnights); //output should be 4

请注意,这是一个粗略的近似值。