java 将日历设置为每月 X 天

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/14828814/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 17:31:49  来源:igfitidea点击:

Set Calendar to X Day in Month

javaandroid

提问by jophde

I am trying to get a time down to the minute from a Calendar object built from four inputs: occurrence in month (3rd), day (Thursday), hour (1), minute(30), and am/pm. Also, if the time is in the past the month should increase by one.

我试图从由四个输入构建的 Calendar 对象将时间缩短到分钟:发生在月 (3rd)、日 (Thursday)、小时 (1)、分钟 (30) 和上午/下午。此外,如果时间在过去,则月份应增加一。

How do I set a a Calendar to this time?

如何将日历设置为这个时间?

This code seems to not set the day. The hour, minute, and am/pm are setting correctly though.

这段代码似乎没有设置日期。小时、分钟和上午/下午设置正确。

Calendar Setup:

日历设置:

long getTime() {
    Calendar calendar = Calendar.getInstance();

    calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, getDayOfWeekInMonth());
    calendar.set(Calendar.DAY_OF_WEEK, getDayOfWeek());
    calendar.set(Calendar.HOUR, getHour());
    calendar.set(Calendar.MINUTE, getMinute());
    calendar.set(Calendar.AM_PM, getAmPm());

    if (System.currentTimeMillis() > calendar.getTimeInMillis()) {
        calendar.add(Calendar.MONTH, 1);
    }

    return calendar.getTimeInMillis();

}

int getDayOfWeekInMonth() {
    return weekOfMonthSpinner.getSelectedItemPosition() + 1;
}

int getDayOfWeek() {
    switch(dayOfWeekSpinner.getSelectedItemPosition()) {
    case 0:
        return Calendar.SUNDAY;
    case 1:
        return Calendar.MONDAY;
    case 2:
        return Calendar.TUESDAY;
    case 3:
        return Calendar.WEDNESDAY;
    case 4:
        return Calendar.THURSDAY;
    case 5:
        return Calendar.FRIDAY;
    case 6:
        return Calendar.SATURDAY;
    default:
        return 0;
    }
}

int getHour() {
    return Integer.parseInt((String) hourSpinner.getSelectedItem());
}

int getMinute() {
    return Integer.parseInt((String) minuteSpinner.getSelectedItem());
}

int getAmPm() {
    switch(amPmSpinner.getSelectedItemPosition()) {
    case 0:
        return Calendar.AM;
    case 1:
        return Calendar.PM;
    default:
        return 0;
    }
}

Spinner Setup:

微调器设置:

<string-array name="week_of_month">
    <item>1st</item>
    <item>2nd</item>
    <item>3rd</item>
    <item>4th</item>
 </string-array>
<string-array name="day_of_week">
    <item>Sunday</item>
    <item>Monday</item>
    <item>Tuesday</item>
    <item>Wednesday</item>
    <item>Thursday</item>
    <item>Friday</item>
    <item>Saturday</item>
</string-array>
<string-array name="hour">
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
    <item>5</item>
    <item>6</item>
    <item>7</item>
    <item>8</item>
    <item>9</item>
    <item>10</item>
    <item>11</item>
    <item>12</item>
</string-array>
<string-array name="minute">
    <item>00</item>
    <item>05</item>
    <item>10</item>
    <item>15</item>
    <item>20</item>
    <item>25</item>
    <item>30</item>
    <item>35</item>
    <item>40</item>
    <item>45</item>
    <item>50</item>
    <item>55</item>
</string-array>
<string-array name="am_pm">
    <item>am</item>
    <item>pm</item>
</string-array>

adapter = ArrayAdapter.createFromResource(getActivity(), R.array.week_of_month, R.layout.spinner_item);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
weekOfMonthSpinner.setAdapter(adapter);

adapter = ArrayAdapter.createFromResource(getActivity(), R.array.day_of_week, R.layout.spinner_item);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
dayOfWeekSpinner.setAdapter(adapter);

adapter = ArrayAdapter.createFromResource(getActivity(), R.array.hour, R.layout.spinner_item);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
hourSpinner.setAdapter(adapter);

adapter = ArrayAdapter.createFromResource(getActivity(), R.array.minute, R.layout.spinner_item);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
minuteSpinner.setAdapter(adapter);

adapter = ArrayAdapter.createFromResource(getActivity(), R.array.am_pm, R.layout.spinner_item);
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
amPmSpinner.setAdapter(adapter);

回答by Subhrajyoti Majumder

Usecalendar.set(Calendar.WEEK_OF_MONTH, <week of the month>);and calendar.set(Calendar.DAY_OF_WEEK, 4);.

使用calendar.set(Calendar.WEEK_OF_MONTH, <week of the month>);calendar.set(Calendar.DAY_OF_WEEK, 4);

Example -

例子 -

Calendar calendar = Calendar.getInstance();
System.out.println("Before - "+calendar.getTime());
calendar.set(Calendar.WEEK_OF_MONTH, 3);
calendar.set(Calendar.DAY_OF_WEEK, 4);
System.out.println("After - "+calendar.getTime());

Result -

结果 -

Before - Tue Feb 12 23:23:28 IST 2013
After - Wed Feb 13 23:18:16 IST 2013