每年11月的最后一个星期五致电

时间:2020-11-12 09:20:46

标签: android calendar integer

我有一个代码,可以手动调用2020年的该月的最后一个星期五。该代码必须识别并调用每年11月的最后一个星期五,任何人都可以帮忙,谢谢。 / p>

    Calendar lastday = Calendar.getInstance();
    int month = lastday.get(Calendar.MONTH);
    int dayOfMonth = lastday.get(Calendar.DAY_OF_MONTH);
    if(month == Calendar.NOVEMBER && dayOfMonth == 27){
        .....
    }

3 个答案:

答案 0 :(得分:1)

您的答案:

Calendar lastday = Calendar.getInstance();
int month = lastday.get(Calendar.MONTH);
int dayOfMonth = lastday.get(Calendar.DAY_OF_MONTH);
int day = lastday.get(Calendar.DAY_OF_WEEK); 
if(month == Calendar.NOVEMBER && dayOfMonth >= 24 && day == Calendar.FRIDAY){
    .....
}

答案 1 :(得分:0)

您可以使用以下解决方案。通过更改calendar.set(Calendar.MONTH, Calendar.NOVEMBER),它应该可以在任何月份使用:

public int getLastFridayOfNovember() {
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.MONTH, Calendar.NOVEMBER);

    int totalDaysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    calendar.set(Calendar.DAY_OF_MONTH, totalDaysInMonth);

    int daysToRollBack = (calendar.get(Calendar.DAY_OF_WEEK) + 1) % 7;
    return totalDaysInMonth - daysToRollBack;
}

用法很简单:

...
int lastDayOfNovember = getLastFridayOfNovember();

如果您使用Kotlin,它也可以作为扩展功能:

fun Calendar.getLastFridayOfMonth(): Int {
    val totalDaysInMonth = getActualMaximum(Calendar.DAY_OF_MONTH)
    this[Calendar.DAY_OF_MONTH] = totalDaysInMonth
    val daysToRollBack = (this[Calendar.DAY_OF_WEEK] + 1) % 7
    return totalDaysInMonth - daysToRollBack
}

用法:

val calendar = Calendar.getInstance()
// set month
calendar.set(Calendar.MONTH, Calendar.NOVEMBER);
// get last Friday of given month
val lastFridayOfNovember = calendar.getLastFridayOfMonth()

答案 2 :(得分:0)

java.time,通过半途而废或通过ThreeTenABP

始终考虑将Java.time(现代Java日期和时间API)用于日期工作。对于像您这里这样更复杂的查询,更是如此。

    LocalDate today = LocalDate.now(ZoneId.systemDefault());
    boolean isLastFridayOfNovember = today.getMonth().equals(Month.NOVEMBER)
            && today.equals(today.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY)));
    System.out.println("Is it the last Friday in November? " + isLastFridayOfNovember);

我今天(11月12日星期四)跑步时的输出:

是11月的最后一个星期五吗?错误

表达式today.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY))计算当前月份的最后一个星期五。如果today等于计算的日期,并且我们在11月,则我们在11月的最后一个星期五。

要计算给定年份11月的最后一个星期五:

    int year = 2021;
    LocalDate lastFridayInNovember = LocalDate.of(year, Month.NOVEMBER, 30)
            .with(TemporalAdjusters.previousOrSame(DayOfWeek.FRIDAY));
    
    System.out.println(lastFridayInNovember);

2021-11-26

问题:java.time是否不需要Android API级别26?

java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在非Android Java 6和7中,获得ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在较旧的Android上,请使用废除旧书或Android版本的ThreeTen Backport。称为ThreeTenABP。在后一种情况下,请确保使用子包从org.threeten.bp导入日期和时间类。

链接