Java - получить разницу между заданными двумя и двумя текущими - PullRequest
0 голосов
/ 22 августа 2011

Например:
Данные даны:

  1. Год-2010, Месяц-2, Fortnight-1

  2. Текущая дата

Как я могу получить разницу с точки зрения количества фортний между двумя данными датами?


Это то, что я понял, и оно работает нормально ...

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 ]

2 голосов
/ 22 августа 2011

Это зависит от вашего определения судьбы.Если мы настроены буквально, то две недели определяются как 14 дней, поэтому вычислите количество дней и разделите их на 14, работа выполнена.

Я подозреваю, что в вашем случае мы на самом деле используем специальный бизнес-календарь, гдеФортнайты - это подразделение кварталов, и, следовательно, существуют некоторые особые случаи: год не делится на фортнины, и, возможно, финансовый год не начинается 1 января?Так что где-то будет окончательный список дат начала каждой двухнедельной недели.

Предположим, что у двухнедельных определений есть

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

Теперь, каково определение количестваС 17 ноября по 16 декабря?Я думаю, 2. С 19 ноября по 16 декабря?Я понятия не имею, какой ответ вы ожидаете.

Итак, сначала выясните, каковы бизнес-требования.Я был бы удивлен, что вы найдете готовые пакеты с датами, которые понимают судьбу, но даже если вам нужно, вы должны очень тщательно проверить, что они дают ответы, которые вам нужны.

0 голосов
/ 22 августа 2011

Если вы хотите сделать это без сторонних библиотек

Сделать 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

Обратите внимание, это грубое приближение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...