显示每月的每周日期

时间:2017-11-29 13:00:07

标签: android calendar android-calendar

   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日至11月

2017年11月5日星期日

2017年11月6日(星期一)

2017年11月7日至11月

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

2017年11月8日星期三

2017年11月9日至11月

2017年11月10日至11月

2017年11月11日至11月

2017年11月12日至11月

2017年11月13日(星期一)

2017年11月14日(星期二)

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

2017年11月15日(星期三)

2017年11月16日(星期四)

2017年11月17日至11月

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:从星期五开始,从星期四开始

1 个答案:

答案 0 :(得分: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-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

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

在哪里获取java.time类?