[英]Get Date of Specific Week
我正在嘗試獲取一個月中特定一周的開始和結束日期。 但是日期不正確。 誰能確定是什么問題?
public class DateUtils
{
getWeeklyDateList(2020,5, 3);
public static void getWeeklyDateList(int year, int month, int week)
{
Calendar calendar = Calendar.getInstance(Locale.getDefault());
// setting year, month, week
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.WEEK_OF_MONTH,week);
// setting day of week to first --> Sunday
calendar.set(Calendar.DAY_OF_WEEK, 1);
int year1 = calendar.get(Calendar.YEAR);
int month1 = calendar.get(Calendar.MONTH);
int day1 = calendar.get(Calendar.DAY_OF_MONTH);
// setting day of week to last --> Saturday
calendar.set(Calendar.DAY_OF_WEEK, 7);
int year7 = calendar.get(Calendar.YEAR);
int month7 = calendar.get(Calendar.MONTH);
int day7 = calendar.get(Calendar.DAY_OF_MONTH);
Log.e("date_start", String.valueOf(year1) + "-" + String.valueOf(month1) + "-" + String.valueOf(day1));
Log.e("date_end", String.valueOf(year7) + "-" + String.valueOf(month7) + "-" + String.valueOf(day7));
} }
如果要使用java.time,現代的Java日期和時間API,可以用這個簡單的方法來完成:
private static WeekFields wf = WeekFields.of(Locale.forLanguageTag("ne-NP"));
public static void getWeeklyDateList(int year, Month month, int week) {
LocalDate someDateInTheWeek = LocalDate.of(year, month, 10).with(wf.weekOfMonth(), week);
LocalDate start = someDateInTheWeek.with(wf.dayOfWeek(), 1);
LocalDate end = someDateInTheWeek.with(wf.dayOfWeek(), 7);
System.out.println("date_start: " + start);
System.out.println("date_end: " + end);
}
使用您的示例 arguments 進行嘗試:
getWeeklyDateList(2020, Month.JUNE, 3);
Output 是:
date_start: 2020-06-14 date_end: 2020-06-20
這個怎么運作:
首先,不同文化對周的定義不同。 在尼泊爾(因為您將尼泊爾加德滿都作為您的位置),周從星期日開始,並且以每月 1 日為每月第 1 周的方式編號。 為了處理本周計划,我正在為尼泊爾文化初始化一個WeekFields
object。
LocalDate
是沒有時間的日期的 java.time class。 我認為我選擇一個月中的哪一天作為起點並不重要。 我拿了第10個。 從該日期開始,我使用WeekFields
object 和提供的周數得到正確周的日期。 從那里依次得到一周的第一天和最后一天,同樣根據尼泊爾對周的定義:從 2020 年 6 月 14 日星期日到 2020 年 6 月 20 日星期六。
我不知道你的代碼出了什么問題。 無論如何,您使用的Calendar
class 設計不佳且早已過時。 它還默認使用 JVM 的默認語言環境作為其周定義,這可能會為您提供與您想要的不同的周計划。 最后一點可能讓您感到困惑: Calendar
不自然地從一月的 0 到十二月的 11 對月份進行編號。 因此,當您指定 5 時,您得到的是六月(而不是五月)。 您打印了結果日期的月份編號,這可能再次打印了 5(而不是 6)六月。
java.time 適用於較舊和較新的 Android 設備。 它只需要至少Java 6 。
org.threeten.bp
導入日期和時間類。java.time
。java.time
到 Java 6 和 7 的 backport(ThreeTen for JSR-310)。因為這條線,calendar.set(Calendar.DAY_OF_WEEK, 1);
如果一周從上一個開始,這可能需要一個月到上個月。 如果有一個月的差異,那么這就是問題所在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.