【问题标题】:Java Calendar: I want to remove specific Day of week from calendar [closed]Java日历:我想从日历中删除特定的星期几[关闭]
【发布时间】:2018-01-01 13:02:18
【问题描述】:

更多细节我想去掉一周中的特定日子。

我的意思是:{Sat(1), Sun(2), Mon(3) , Tues(4) , Wed (5),Thurs(6) ,Fri(7)}

删除工作日:{Sat(1), Sun(2), Mon(3) , Tues(4) , Wed (5)}

所以我可以获得从特定开始日期到现在日期的天数,不包括排除天数。

提示:我必须使用 Java 日历

问题是动态指定日期

【问题讨论】:

标签: java date-range weekday java-calendar


【解决方案1】:

如果您可以使用 LocalDate 和流,则可以应用函数式方法。

LocalDate start = LocalDate.of(2015, 2, 1);
LocalDate end = LocalDate.of(2015, 2, 28);

List<DayOfWeek> includedDays = Arrays.asList(DayOfWeek.THURSDAY, DayOfWeek.FRIDAY);

long daysCount = Stream.iterate(start, date -> date.plusDays(1))
        .limit(ChronoUnit.DAYS.between(start, end))
        .filter(d -> includedDays.contains(d.getDayOfWeek()))
        .count();

如果您坚持使用日历,请使用:

GregorianCalendar calendarStart = new GregorianCalendar(2015, 2, 1);
GregorianCalendar calendarEnd = new GregorianCalendar(2015, 2, 28);

List<Integer> includedDays = Arrays.asList(GregorianCalendar.THURSDAY, GregorianCalendar.FRIDAY);
long count = 0;
while(!calendarStart.equals(calendarEnd)) {
    if(includedDays.contains(calendarStart.get(Calendar.DAY_OF_WEEK))) {
        count ++;
    }
    calendarStart.add(Calendar.DATE, 1);
}

【讨论】:

  • 你不能为includedDays创建动态列表吗?
  • 好的,所以您必须将其动态转换为列表。如果你没有展示数据是如何从前端进来的,你希望我怎么给你更准确的答案?
  • 此列表只是假设您希望包括星期四和星期五的示例。 GregorianCalendar.THURSDAYGregorianCalendar 类的常量,其值为 5GregorianCalendar.FRIDAY6。 List includedDays 已经是整数列表,所以你只需要使用你的数据而不是这个硬编码的例子。
  • @Eng.Gabr 如果您提供一些示例代码,这将很多更容易。除此之外,我真的看不出将整数数组转换为整数列表的问题。
  • Calendar.THURSDAY 只是常量,值为 5。创建列表的代码行可以写成:Arrays.asList(new int[]{5, 6}); 而不是硬编码 new int[]{5,6};,只需使用来自前端的数据。
猜你喜欢
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多