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:从星期五开始,从星期四开始
答案 0 :(得分:0)
您使用的是可怕的旧类,现在已经被 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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?