2016-06-13 3 views
0

Я пробовал следующий пример. Если я пройду указанные даты, он должен вернуться на 3-ей неделе, но он вернется на вторую неделю. Что не так в моем коде? Пожалуйста, помогите мне в этом.Неправильный номер недели данной даты

public class weekNumberCount { 
    public static void main(String[] args) 
    { 
     Timestamp startTime = new Timestamp(2016, 05, 17, 00, 00, 00, 00); 
     Timestamp endTime = new Timestamp(2016,06, 06, 23, 59, 59, 00); 
     Timestamp givenDateString = new Timestamp(2016, 06, 01, 00, 00, 00, 00); 

     if (givenDateString.compareTo(startTime) < 0 || givenDateString.compareTo(endTime) > 0) { 
      System.out.println("Not a Valid Date"); 
     } 

     System.out.println((int)(((givenDateString.getTime() - startTime.getTime() - 1)/(1000L * 3600 * 24 * 7)) + 1)); 
    } 
} 
+0

На первый взгляд, я вижу, что данная логика вычисляет количество недель между 17 мая и 1 июня. И это 2 недели. Сообщите нам, если вы пытаетесь достичь чего-то другого. 17 мая - 3 недели от 01 мая. – uday

ответ

0

Проблема с кодом вы вычитая дополнительные 1 из разности двух дат. Что вы должны сделать, это взять разность этих двух дат, которая подходит к 2-х недель, а затем добавить 1, который знаменует собой начало третьей недели

Следовательно, вы должны только

((givenDateString.getTime() - startTime.getTime())/(1000L * 3600 * 24 * 7))+1 

Обновление:

Существует проблема с пониманием. в Java все месяцы 0 на основе так работает, как:

Jan - 0

февраля - 1

.

.

декабря - 11

Так проходят месяцы, соответственно, в вашем коде и рассчитать неделю, принимая ceil разницы, как это.

System.out.println(Math.ceil((givenDateString.getTime() - startTime 
        .getTime())/(1000d * 3600 * 24 * 7))); 

Еще одна вещи вы используете устаревший конструктор из класса Timestamp вместо этого использовать Calendar объект для выполнения задачи.

Надеюсь, это поможет.

+0

проверить на startTime - 2016, 04, 25 и givenDateString - 2016, 05,01. Это дает неделю как 2, но это неделя 1. – dafodil

Смежные вопросы