Java 乔达时间:如何从一年中的某个特定日期算起一天?

Java 乔达时间:如何从一年中的某个特定日期算起一天?,java,date,datetime,calendar,jodatime,Java,Date,Datetime,Calendar,Jodatime,我有一份一年的假期清单。我需要以下东西 我需要得到一年中的所有日期。然后我需要移除所有的 假期,并获取剩余日期。类似于: 获取日期(一年中的所有日期) 获取假期日期(我已经将它们存储在数据库中) 获取日期-假日日期 针对特定日期,我需要知道今天是哪一天(星期一?星期二?哪一天?) 问题:- 使用这个库,请分享最简单的方法 第一个问题的答案: public static List<LocalDate> getDaysOfYear(int year, List<LocalDate&

我有一份一年的假期清单。我需要以下东西

  • 我需要得到一年中的所有日期。然后我需要移除所有的 假期,并获取剩余日期。类似于:

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

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

    获取日期-假日日期

  • 针对特定日期,我需要知道今天是哪一天(星期一?星期二?哪一天?)

  • 问题:-


    使用这个库,请分享最简单的方法

    第一个问题的答案:

    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的更新:

    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
    
    使用数字(或命名常量,如最终也只有数字)的另一种方法是使用属性。它允许访问本地化名称,如“星期一”(英语)或“Lundi”(法语)

    请参见以下代码示例:

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

    对于此类仅限日期的问题,类型
    LocalDate
    是迄今为止最简单、最直接的问题。只有当您有时间段并且需要进行时区计算时,类型
    DateTime
    才有意义。

    您见过(DateTime)
    plusDays(int)
    ?你可以用它来迭代一年中的每个日期。第二部分是
    dayOfWeek()
    。请尝试此选项,并用您的成绩修改您的问题。:)看看他们的javadoc。快速查看会提供大量信息。如果迭代,请不要忘记检查年份是否为闰年。@vikingsteve好的,我将尝试一下。在文档中查找此信息很简单。没有提到什么是triedTip…英文中的星期名称作为常量提供:依此类推。使代码比测试数字1、2等更具可读性。@BasilBourque是的,使用命名常量很好,特别是因为JodaTime由于历史原因缺少枚举。另请参阅我的更新答案,了解属性
    dayOfWeek()
    的用法。