私はアンドロイドアプリを作っているので、現在の日付と現在の月の最終日の間の日数を計算する必要があります。 今日が2011年1月11日で、今月の最終日が30/11/2017であるとします。 30日後には30日後に翌月が始まるからです。今日の日付から今月の最終日までの日数を取得する方法は?
答えて
Calendar calendar = Calendar.getInstance();
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int currentDay = calendar.get(Calendar.DAY_OF_MONTH);
int daysLeft = lastDay - currentDay;
System.out.println("Last Day: " + lastDay);
System.out.println("Current Day : " + currentDay);
System.out.println("There are " + daysLeft + " days left in the month.");
私はjava.time
がAndroid
で提供されていますが、それがある場合は、LocalDate
とChronoUnit
を使用することができればかなりわからない出力
Last Day: 30
Current Day : 1
There are 29 days left in the month.
:
LocalDate today = LocalDate.now();
LocalDate lastDayOfMonth = today.withDayOfMonth(today.lengthOfMonth());
System.out.println(today); // 2017-11-01
System.out.println(lastDayOfMonth); // 2017-11-30
System.out.println(ChronoUnit.DAYS.between(today,lastDayOfMonth)); // 29
java.timeの機能の多くは、ThreeTen-BackportプロジェクトのJava 6およびJava 7にバックポートされています。さらに、ThreeTenABPプロジェクトでAndroidに対応しました。 –
あなたは 'getDays'メソッドを悪用しています。このメソッドは、 'Period'の* part *、年数と月数を数えた後の日数*だけを返します。この特定のケースでは、あなたのコードは機能しますが、私たちは1カ月未満しかないためです。しかし、それは偶然の幸運であり、良いプログラミングではありません。 'Period'クラスは単にこの問題の間違ったクラスです。 –
@BasilBourque、はい、あなたはまったく正しいです、それは私たちにとって 'ChronoUnit.DAYS'です。 –
TL; DR
ChronoUnit.DAYS.between(today , firstOfNextMonth)
java.time
現在の日付を特定するには、タイムゾーンが必要です。任意の瞬間について、日付は地球の周りでタイムゾーンによって異なります。
は、America/Montreal
、Africa/Casablanca
、又はPacific/Auckland
として、continent/region
の形式でproper time zone nameを指定します。 EST
またはIST
のような3〜4文字の略語は、ではなく、のように、標準化されておらず、ユニークではない(!)と使用しないでください。
ZoneId z = ZoneId.of("Africa/Casablanca") ;
LocalDate today = LocalDate.now(z) ;
それから、月全体を表すオブジェクトを現在のYearMonth
にします。
YearMonth ym = YearMonth.from(today) ;
これで、来月1日に尋ねます。一般に、時間の処理には、Half-Openのアプローチがベストプラクティスです。最初は()ですが、末尾は()です。したがって、今月は、次の月の初めまで実行されますが、それを含みます。
LocalDate firstOfNextMonth = ym.plusMonths(1).atDay(1) ;
ChronoUnit
列挙型を使用し、合計日数のカウントを取得します。
long days = ChronoUnit.DAYS.between(today , firstOfNextMonth) ;
コンソールにダンプします。
System.out.println(days + " days between " + today + " and " + firstOfNextMonth) ;
このcode run live at IdeOne.comを参照してください。 FYI 2017年11月1日と2017年12月1日
間
30日、あなたは時間のスパンを追跡するために
Period
を使用することができます。他の目的には便利ですが、ではなく、に相当します。 Javaの概要Period p = Period.between(today , firstOfNextMonth) ;
。時間
java.timeフレームワークはJava 8以降に組み込まれています。これらのクラスは、
java.util.Date
、Calendar
、&SimpleDateFormat
など、面倒な古いlegacy日時クラスに取って代わります。maintenance modeにあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。
詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。
ここで、java.timeクラスを取得するには?
- Java SE 8、Java SE 9、以降
- 内蔵しています。
- バンドルされた実装の標準Java APIの一部です。
- のJava 9は、いくつかのマイナーな機能と修正が追加されます。
- Java SE 6とJava SE 7
- java.time機能の多くはThreeTen-BackportのJava 6 & 7に戻って、移植されます。
- Android
ThreeTenABP
- プロジェクトは、具体的にはAndroid用(上記)ThreeTen-バックポートを適応させます。
- How to use ThreeTenABP…を参照してください。
- 1. 今日の日付から前の月を取得する
- 2. 今日の日付から次のx月を取得する
- 3. PHPでは今日から今日まで7日間の日数を取得する方法は?
- 4. 今日から30日前、今日から12ヶ月前に取得する
- 5. AppleScriptの月の最終日と今月の休日を取得する
- 6. 月曜日から今日までの配列を取得Swift
- 7. Joda LocalDateTime:今日までの日付を取得する方法
- 8. 今日の取得方法 - sparksqlの "1日"の日付?
- 9. PHPで次の月曜日の日付を取得する(今日を含む)
- 10. 今週の月曜日の日付
- 11. 今日の当月の日付
- 12. 今日の日付は今日の日付で、最後の日付は5年ではない
- 13. 今日のSQLを使って今日の日付を取得する(mon-sun)
- 14. 今日の日付から前の日付を取得します。
- 15. 今日の日付のデータベースからデータを取得する
- 16. 今日の日付から今日の日付まで毎日コードを実行します。
- 17. 今日の平日の日付を取得する
- 18. 日付パラメタ最小の日付は今日のURLです
- 19. 日付を含む6か月未満の日付、今日は2日以内
- 20. Android 30日今日から今日
- 21. ストアから日付を取得して今日の日付と比較する
- 22. yii 2今日の日付ピッカーのみ今日まで許可
- 23. 最後の3ヶ月の月曜日から日曜日の日付を取得する方法Redshiftで?
- 24. SSRSでは今日の日付ピッカーカレンダーで今日後の日付を無効にする方法
- 25. 今日のデータを今日の日付まで取得するにはどうすればよいですか?
- 26. 8月2日から9月02日までの日付の取得方法
- 27. Javaでの日付計算、今日から3ヶ月追加
- 28. 今月の第1週の日付の取得方法
- 29. なぜ新しい日付今日は今日昨日返す
- 30. 今月からの日数と前回の日からの日数の比較
問題のデバッグに役立つように、既に試したことをいくつか含めてください。 –
グレゴリオ暦を使用したカレンダーインスタンスは、ここでお手伝いします。 – DroiDev
コードを記述する前に、「曜日間」の意味を定義する必要があります。その句があいまいであるためです。 –