Joda-Time:如何从一年中的特定日期获得一天?

时间:2014-04-29 10:37:09

标签: java date datetime calendar jodatime

我有一年的假期清单。我需要以下几点。

  1. 我需要获得一年中的所有日期。然后我需要删除所有 假期并获得剩余的日期。类似的东西:

    获取日期(一年中的所有日期)

    获取假期日期(我已将它们存储在数据库中)

    获取日期 - 假日日期

  2. 在特定日期,我需要知道它是哪一天(星期一?星期二?星期几?)

  3. 问题: -

    使用Joda-Time库,请分享最简单的方法。

1 个答案:

答案 0 :(得分:5)

回答第一个问题:

public static List<LocalDate> getDaysOfYear(int year, List<LocalDate> holidays) {

  LocalDate date = new LocalDate(year, 1, 1);
  LocalDate end = new LocalDate(year + 1, 1, 1);
  List<LocalDate> list = new ArrayList<LocalDate>();

  while (date.isBefore(end)) {
    if (!holidays.contains(date)) {
      list.add(date);
    }
    date = date.plusDays(1);
  }

  return Collections.unmodifiableList(list);
}

回答第二个问题:

LocalDate date = LocalDate.now();
int dow = date.getDayOfWeek();
// dow has the values 1=Monday, 2=Tuesday, ..., 7=Sunday

问题2的更新:

使用数字(或命名常量,如DateTimeConstants.MONDAY,最后也只是数字)的替代方法是使用属性dayOfWeek().getAsText()。它允许访问本地化的名称,例如&#34; Monday&#34; (英文)或&#34; Lundi&#34; (法国)。

请参阅此代码示例:

LocalDate date = LocalDate.now();
String nameOfWeekday = date.dayOfWeek().getAsText(Locale.ENGLISH);

对于此类仅限日期的问题,类型LocalDate是迄今为止最简单直接使用的类型。如果您有时间部分并且需要时区计算,则DateTime类型才有意义。