java - 如何获取某个月份的所有日期

标签 java android date calendar

当我使用这些代码时,我会获取我们所在月份的日期。例如,我可以看到从 01/09/201721/09/2017 之间的日期.

private void createRandomData(InMemoryCursor cursor) {
List<Object[]> data = new ArrayList<>();
Calendar today = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
today.set(Calendar.HOUR_OF_DAY,0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MILLISECOND, 0);

mStart = (Calendar) today.clone();
mStart.set(Calendar.DAY_OF_MONTH, 1);
while (mStart.compareTo(today) <= 0) {
    data.add(createItem(mStart.getTimeInMillis()));
    mStart.add(Calendar.DAY_OF_MONTH, 1);
}
    cursor.addAll(data);
}

但是,我需要特定月份的日期。我如何查看其他月份的其他日期?例如,我想查看四月的日期。它应该不是九月。(我知道它与today.clone()相关,但是我不明白如何更改它)。

我计划在 Android studio 中用对话框分隔月份,当我选择任何月份时,我应该会看到该月的所有日期。

我只需要一个月的日期来执行此操作,例如四月。如何获取四月的日期? (如果我得到四月的日期,我可以在所有月份都这样做)

编辑一些变化和结果:

private void createRandomData(InMemoryCursor cursor) {
List<Object[]> data = new ArrayList<>();
Calendar today = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
today.set(Calendar.HOUR_OF_DAY,0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MILLISECOND, 0);

mStart = (Calendar) today.clone();
mStart.set(Calendar.MONTH, Calendar.APRIL);
mStart.set(Calendar.DAY_OF_MONTH, 1);
data.add(createItem(mStart.getTimeInMillis()));
cursor.addAll(data);
}

我只得到01/04/2017

private void createRandomData(InMemoryCursor cursor) {
List<Object[]> data = new ArrayList<>();
Calendar today = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
today.set(Calendar.HOUR_OF_DAY,0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MILLISECOND, 0);

mStart = (Calendar) today.clone();
mStart.set(Calendar.MONTH, Calendar.APRIL);
int daysInMonth = today.getActualMaximum(Calendar.DAY_OF_MONTH);
for(int i=0; i<daysInMonth; i++ ){
mStart.set(Calendar.DAY_OF_MONTH, i);}
data.add(createItem(mStart.getTimeInMillis()));
cursor.addAll(data);
}

我只得到 29/04/2017 并且如果我将 mStart.set(Calendar.DAY_OF_MONTH, i) 更改为 mStart.set(Calendar.DAY_OF_MONTH , 1) 结果是 01/04/2017

最佳答案

要获取特定月份的所有日期,请将日历设置为该月的日期,例如第 1 种,向 Calendar 询问该月的日期数,然后获取日期。

您也可以只获取月份更改之前的日期,但下面的代码会询问该月的天数,以展示如何做到这一点。

此代码仅打印日期。您当然可以用它们做任何您想做的事。

public static void printDatesInMonth(int year, int month) {
    SimpleDateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
    Calendar cal = Calendar.getInstance();
    cal.clear();
    cal.set(year, month - 1, 1);
    int daysInMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    for (int i = 0; i < daysInMonth; i++) {
        System.out.println(fmt.format(cal.getTime()));
        cal.add(Calendar.DAY_OF_MONTH, 1);
    }
}

测试

printDatesInMonth(2017, 2);

输出

01/02/2017
02/02/2017
03/02/2017
04/02/2017
05/02/2017
06/02/2017
07/02/2017
08/02/2017
09/02/2017
10/02/2017
11/02/2017
12/02/2017
13/02/2017
14/02/2017
15/02/2017
16/02/2017
17/02/2017
18/02/2017
19/02/2017
20/02/2017
21/02/2017
22/02/2017
23/02/2017
24/02/2017
25/02/2017
26/02/2017
27/02/2017
28/02/2017

关于java - 如何获取某个月份的所有日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46346190/

相关文章:

Mysql通配符查询问题

java - 在类或方法中放置变量的最佳位置 (Android Studio)

java - 如何从上面的类中调用方法?

android - 从我的回收适配器的点击功能传递数据

android - 在 React Native 的标题中创建带图像的抽屉导航

android - Android 应用程序的 "Feature Graphic"是什么?

iphone - 如何以编程方式构建本地化日历月份名称的 NSArray?

java - 无法检查来自 SQLite 的有效登录

java - 设置图标时遇到问题

python - 使用出生日期从 Django 模型中过滤人员