首页 文章

显示每月的每周日期

提问于
浏览
0
public static void getWeeksOfMonth(int month, int year)
{
    SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd-MMM-yyyy");
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, month);
    cal.set(Calendar.DAY_OF_MONTH, 1);

    int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    System.out.println(ndays+"<<<ff" );

    for (int i = 1; i <= ndays; i++)
    {
        String day = sdf.format(cal.getTime());
        System.out.println(day+"<<<" );
        Log.e("quest", day+"<<<");
        if(i % 7 == 0){
            Log.e("question", "=======week days===========");
        }
        cal.add(Calendar.DATE, 1);
    }

}

产量

2017年11月4日星期六

2017年11月5日星期日

2017年11月6日星期一

2017年11月7日星期二

=======工作日===========

2017年11月8日星期三

2017年11月9日星期四

2017年11月10日星期五

2017年11月11日星期六

2017年11月12日星期日

2017年11月13日星期一

2017年11月14日星期二

=======工作日==========

2017年11月15日星期三

2017年11月16日星期四

2017年11月17日星期五

2017年11月18日星期六

2017年11月19日星期日

2017年11月20日星期一

2017年11月21日星期二

=======工作日===========

2017年11月22日星期三

2017年11月23日星期四

2017年11月24日星期五

2017年11月25日星期六

2017年11月26日星期日

2017年11月27日星期一

2017年11月28日星期二

=======工作日===========

2017年11月29日星期三

2017年11月30日星期四

1:-But i want complete last week Wed to Tuesday

2:-start weeks from Friday and end with Thursday

1 回答

  • 0

    使用java.time

    您正在使用可怕的旧类,现在已被java.time类取代 .

    YearMonth类代表整整一个月 .

    YearMonth ym = YearMonth.of( 2018 , Month.JANUARY ) ;
    

    定义输出字符串的格式 .

    Locale locale = Locale.US ; 
    DateTimeFormatter f = DateTimeFormatter.ofPattern( 
        "EEEE dd-MMM-uuuu" ,
        locale 
    ) ;
    

    我建议让你使用java.time automatically localize而不是硬编码格式 . 要进行本地化,请指定:

    • FormatStyle确定字符串应该多长或缩写 .

    • Locale确定:

    • 用于翻译日期名称,月份名称等的人类语言 .

    • 文化规范决定缩写,大写,标点符号,分隔符等问题 .

    定义格式化程序:

    DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( 
        FormatStyle.LONG , 
        Locale.CANADA_FRENCH 
    ) ;
    

    或许收集到List .

    int initialCapacity = ym.lengthOfMonth() ;
    List< String > outputs = new ArrayList<>( initialCapacity ) ;
    

    循环过去的日子 .

    for( int i = 1 , i <= ym.lengthOfMonth() ; i ++ ) {
        LocalDate ld = ym.atDay( i ) ;
        String output = ld.format( f ) ;
        outputs.add( output ) ;
    }
    

    要按星期对它们进行分组,请使用 DayOfWeek 枚举 .

    DayOfWeek dow = ld.getDayOfWeek() ;
    if ( dow.equals( DayOfWeek.WEDNESDAY ) ) { … }
    

    关于java.time

    java.time框架内置于Java 8及更高版本中 . 这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat .

    Joda-Time项目现在位于maintenance mode,建议迁移到java.time类 .

    要了解更多信息,请参阅Oracle Tutorial . 并搜索Stack Overflow以获取许多示例和解释 . 规格是JSR 310 .

    您可以直接与数据库交换java.time对象 . 使用JDBC driver符合JDBC 4.2或更高版本 . 不需要字符串,不需要 java.sql.* 类 .

    从哪里获取java.time类?

相关问题