2012-03-03 17 views
4

Javaの2つの日付範囲の間に週と月を取得したいと考えました。 EXについて、 開始日:2012年3月1日 終了日:二つの日付は、2つの異なる週に落ちるので、2012年3月5日2つの日付間の週Java + Joda時間

私は結果が2ではなく0

になりたいです問題の第二の部分は次のとおりです。 スタート日:2012年2月29日 終了日:間の月の2012年3月1日

数が、私はこれについてオンラインで検索されている2

であるべきで、多くの人がJoda DateをJavaで使用することを推奨しています。だから私はそれを撃った。私は週を稼働させることができましたが、これが正しいかどうかはわかりません。ここで私は一週間の時間を得るためにやっているものです:

DateTime s = new DateTime(Long.parseLong("1330573027000")); // 2012-02-29 
    DateTime e = new DateTime(Long.parseLong("1331005027000")); // 2012-03-05 

    Weeks weeks = Weeks.weeksBetween(s, e).plus(1); 

この2つの日付が異なる週にあるので、私は2を期待していたときに、1を返します。

私は同じことを続けましたが、0を返しましたが、2つの日付が2ヶ月間あるため、2を返します。

誰かが正しい方向に向いていますか?

ありがとうございます!

編集:

DateTime start = new DateTime(Long.parseLong("1330659427000")); 
    DateTime start = new DateTime(Long.parseLong("1331005027000")); 

    DateTime finalStart = start.dayOfWeek().withMinimumValue(); 
    DateTime finalEnd = end.dayOfWeek().withMaximumValue(); 
そしてfinalStartとfinalEndの違いを取得:
私はそれを行うための一つの方法だと思う、それは右に見えるなら、私に知らせてください。これは正しいか?

EDIT2 は、それはあなたが後にあるものを与えず終了時刻

+0

二つの異なる週間? '2012-02-29'と' 2012-12-29'の2つの異なる週を満たすとどうなるでしょうか?あなたは答えを見て= 2、上記のためにも? – Narayan

+0

いいえ、あなたがリストしたシナリオでは、2つの日付範囲の間の週数をカウントする必要があります。だから私が本質的にやりたいことは、開始日の最初の日と終了日の最後の日との間の期間を得ることです。そうすれば、私は2つの日付の間だけではなく2を得ることになります。あなたの例では – test123

+0

、週は2つの異なる週にはありません、 '2012-02-29'と' 2012-03-01'は同じ週に属しています!あなたの要件は明確ではありません! – Narayan

答えて

0
int OFFSET_ONE = 1; 

    DateTime t1 = new DateTime().withDate(2012, 02, 29).withDayOfWeek(1); 
    DateTime t2 = new DateTime().withDate(2012, 03, 05).withDayOfWeek(7); 

    int week1 = t2.weekOfWeekyear().get(); 
    int week2 = t1.weekOfWeekyear().get(); 

    System.out.println(week1-week2+OFFSET_ONE); // add OFFSET_ONE 

を更新しましたか?

+1

は、私はそれがないと思いますが、それはどのようにしている私がやっていたとは異なります。 '日時S =新のDateTime(Long.parseLong( "1330659427000")); =新しいのDateTime' 'のDateTime E(Long.parseLong( "1330832227000")); '\t 'のDateTime FS = s.dayOfWeek()withMinimumValue(); '' 日時FE = e.dayOfWeek()withMaximumValue(); '' 週週間= Weeks.weeksBetween(FS 、fe).plus(1); ' – test123

+0

はOK!しかし、その非常に奇妙な要件!私が言うことができるすべてです! – Narayan

6

JodaTime Weeks.weeksBetween(s、e)は週全体のカウントのみを返します。不完全な週は数えられません。この問題を解決するには、曜日が週の始まりと終わりであることを保証する必要があります。 これを試してみてください:

int weeks = Weeks.weeksBetween(s.dayOfWeek().withMinimumValue().minusDays(1), 
      e.dayOfWeek().withMaximumValue().plusDays(1)).getWeeks(); 

minusDays/plusDaysは私がカウントしようとしている週がいっぱいであることをgaranteeます。

同じ論理がヶ月間適用されます。

int months = Months.monthsBetween(s.dayOfMonth().withMinimumValue().minusDays(1), 
      e.dayOfMonth().withMaximumValue().plusDays(1)).getMonths(); 
関連する問題