我已经选择了某个月的旋转器,然后我还创建了一些用于选择特定日期的复选框,那么在选择这些信息后如何显示所有日期?
E.g。如果我选择一月并选择星期一和星期三,我如何显示星期一的所有日期:2 / 1,9 / 1 /,16 / 1,23 / 1,30 / 1和星期三:4 / 1,11 / 1 ,分别是18 / 1,25 / 1?
我期待着您的回复!谢谢!
答案 0 :(得分:1)
使用此方法,您可以
private String getMondaysOfJanuary()
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, Calendar.JANUARY); // month starts by 0 = january
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
int month = cal.get(Calendar.MONTH);
String output = "";
while (cal.get(Calendar.MONTH) == month) {
output += cal.get(Calendar.DAY_OF_MONTH) + "/" + (cal.get(Calendar.MONTH)+1) + ",";
cal.add(Calendar.DAY_OF_MONTH, 7);
}
return output.substring(0, output.length-1);
}
用您的数据替换这两行并参数化此方法可以实现目标
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
答案 1 :(得分:0)
旧的Date
和Calendar
类已被证明是混乱,有缺陷和麻烦的。现在遗留下来,取而代之的是Java 8及更高版本中的java.time类。请参阅下文,了解早期Java和Android的后端口链接。
可以使用DayOfWeek
枚举来表示您的星期几复选框背后的数据。该课程提供七个实例,一周中每周一个,周一至周日。
您可以使用EnumSet
收集用户所需的日期,这是Enum
个对象的特殊高度优化Set
实现。
Set<DayOfWeek> daysOfWeek = EnumSet.noneOf( DayOfWeek.class );
daysOfWeek.add( DayOfWeek.MONDAY );
daysOfWeek.add( DayOfWeek.WEDNESDAY );
使用YearMonth
对象记住所选的月份和年份。
YearMonth ym = YearMonth.of( 2017 , Month.JANUARY ); // Or ( 2017 , 1 ) for January.
获取该月的第一个日期,表示为LocalDate
。 LocalDate
类表示没有时间且没有时区的仅限日期的值。
LocalDate firstOfMonth = ym.atDay( 1 );
在我们的收藏中循环每周。对于每个,确定该月的第一次出现。 Java为第一次出现TemporalAdjuster
提供了一个方便的TemporalAdjusters
实现。然后一次添加一周,直到我们发现自己在下个月。
for ( DayOfWeek dayOfWeek : daysOfWeek ) {
List<LocalDate> dates = new ArrayList<> ( 5 );
LocalDate ld = firstOfMonth.with ( TemporalAdjusters.dayOfWeekInMonth ( 1 , dayOfWeek ) );
do {
dates.add ( ld );
// Set up next loop.
ld = ld.plusWeeks ( 1 );
} while ( YearMonth.from ( ld ).equals ( ym ) ); // While in the targeted month.
System.out.println ( "ym.toString(): " + ym + " | dayOfWeek.toString(): " + dayOfWeek + " | dates: " + dates );
}
ym.toString():2017-01 | dayOfWeek.toString():星期一|日期:[2017-01-02,2017-01-09,2017-01-16,2017-01-23,2017-01-30]
ym.toString():2017-01 | dayOfWeek.toString():WEDNESDAY |日期:[2017-01-04,2017-01-11,2017-01-18,2017-01-25]
请参阅this code live in IdeOne.com。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。