Android 每年11月的上周五打电话

Android 每年11月的上周五打电话,android,calendar,integer,Android,Calendar,Integer,我有一个代码,可以手动调用2020年当月的最后一个星期五。代码必须识别并拨打每年11月的最后一个星期五,有人能帮忙吗,谢谢 Calendar lastday = Calendar.getInstance(); int month = lastday.get(Calendar.MONTH); int dayOfMonth = lastday.get(Calendar.DAY_OF_MONTH); if(month == Calendar.NOVEMBER &

我有一个代码,可以手动调用2020年当月的最后一个星期五。代码必须识别并拨打每年11月的最后一个星期五,有人能帮忙吗,谢谢

    Calendar lastday = Calendar.getInstance();
    int month = lastday.get(Calendar.MONTH);
    int dayOfMonth = lastday.get(Calendar.DAY_OF_MONTH);
    if(month == Calendar.NOVEMBER && dayOfMonth == 27){
        .....
    }
你的回答是:

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){
    .....
}

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

public int getLastFridayOfNomber(){
日历=Calendar.getInstance();
calendar.set(calendar.MONTH,calendar.11th);
int totalDaysInMonth=calendar.getActualMaximum(calendar.DAY\u OF\u MONTH);
calendar.set(calendar.DAY\u OF_MONTH,totalDaysInMonth);
int daysToRollBack=(calendar.get(calendar.DAY/u/u-WEEK)+1)%7;
返回totalDaysInMonth-daysToRollBack;
}
用法很简单:

。。。
int lastdayofnomber=GetLastFridayofnomber();
如果您使用Kotlin,它也可以是扩展功能:

fun Calendar.getLastFridayOfMonth():Int{
val totalDaysInMonth=getActualMaximum(日历。每月的第天)
此[日历.日期\月的\日]=月的总计日期
val daysToRollBack=(此[日历.周中的第天]+1)%7
返回totalDaysInMonth-daysToRollBack
}
用法:

val calendar=calendar.getInstance()
//固定月份
calendar.set(calendar.MONTH,calendar.11th);
//获取给定月份的最后一个星期五
val lastfridayofnomber=calendar.getLastFridayOfMonth()
java.time通过去糖化或ThreeTenABP

总是考虑使用Java.Times,即现代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日星期四)跑步时的输出:

是十一月的最后一个星期五吗?假的

表达式
today.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY))
计算当前月份的最后一个星期五。如果
今天
等于计算的日期,我们是在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吗? time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
  • 在较旧的Android上,可以使用desugaring或Android版本的ThreeTen Backport。它叫ThreeTenABP。在后一种情况下,请确保使用子包从
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

祝贺你的逻辑,你有一个好主意,11月的最后一个星期五不能少于24天!赞美@谢谢,这是stackoverflow.com的第一个答案
@Ali Najafi
好极了,我很高兴你的逻辑
@Natig Babayev
感谢您的解决方案。