【问题标题】:show weekly days of month显示每月的星期几
【发布时间】:2017-11-29 13:00:06
【问题描述】:
   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:-但我想在上周星期三到星期二完成

2:- 从星期五开始几周,到星期四结束

【问题讨论】:

    标签: android calendar android-calendar


    【解决方案1】:

    使用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 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。

    从哪里获得 java.time 类?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 2020-10-23
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多