2016-06-13 12 views
0

私は次の例を試しました。もし私が上記の日付に合格すれば、それは3週目を返すべきですが、2週間目を返しています。私のコードで何が間違っていますか?この点で私を助けてください。与えられた日付の間違った週番号を取得する

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

一見すると、特定のロジックが5月17日から6月1日までの週数を計算していることがわかります.2週間です。あなたが何か他のものを達成しようとしているのなら、私たちに知らせてください。 5月17日は5月1日から3週間です。 – uday

答えて

0

コードで問題が発生した場合は、2つの日付の相違から1を差し引いています。あなたは何をすべき2週間に来ているこれら二つの日付の違いを取った後、1を加える第3週の開始をマークした

したがって、あなたが

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

を唯一の必要があるのアップデートです。

理解に問題があります。 - 0

2月 - 1

月:Javaですべての月では、それはのように動作しますので、ベース0です。

12月 - 11

は、だからあなたのコードに応じて数ヶ月を渡すと、このような違いのceilを取ることによって、週を計算します。

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

もう一つは、あなたの代わりにタスクを実行するためにCalendarオブジェクトを使用Timestampクラスの非推奨のコンストラクタを使用しています。

希望します。

+0

startTime - 2016、04、25およびgivenDateString - 2016,05,01をチェックします。これは週を2にしますが、週1です。 – dafodil

関連する問題