【问题标题】:How to properly use getDayOfWeek method如何正确使用 getDayOfWeek 方法
【发布时间】:2019-09-12 16:21:21
【问题描述】:

我有作业,这是我的任务:

创建一个对象类,它具有:

  • Lo​​calDate 数据类型的私有实例字段,称为截止日期
  • 实例化字段的构造函数
  • get 方法
  • 一套方法

截止日期不能在星期六或星期日 - 如果发生这种情况,将抛出 (IllegalArgumentException) 异常以及有关不适当日期的消息(格式为 dd.mm.yyyy)。使用适当和不适当的截止日期演示该方法。提示:使用 getDayOfWeek 方法显示星期几。

我有一个问题,我真的不明白如何正确使用 getDayOfWeek 方法,当然我尝试从这方面执行程序,但我的输出是:Deadline@2d554825

我已经尝试过使用这种方法,但我真的不明白它需要返回哪种数据类型

public DayOfWeek getDayOfWeek() {
    // what should I return?
}

这是我的代码:

import java.time.DayOfWeek;
import java.time.LocalDate;

public class Deadline {

    private LocalDate deadline;

    public Deadline(LocalDate DeadLine) {
        this.deadline = DeadLine;
    }

    public LocalDate getDeadline() {
        return deadline;
    }

    public void setDeadline(LocalDate deadline) {
        this.deadline = deadline;
    }

    public static void main(String[] args){
        Deadline first = new Deadline(LocalDate.parse("2017-02-03"));
        System.out.println(first);
        }
}

【问题讨论】:

  • 我给你2个线索:1)getDayOfWeekLocalDate类暴露的现有方法。 2) 你有一个LocalDate deadline,它不能在周六/周日
  • 要处理 'Deadline@2d554825' 你需要重写 Deadline.toString() 来进行日期格式化。

标签: java localdate


【解决方案1】:

首先,如果您想知道星期几的名称,请这样做:

LocalDate a = LocalDate.parse("2017-02-03");
System.out.println(a.getDayOfWeek().name());

通过这种方式,您可以将给定的星期几与“SATURDAY”或“SUNDAY”等字符串进行比较。

其次,如果你想这样做

Deadline first = new Deadline(LocalDate.parse("2017-02-03"));
System.out.println(first);

您需要在 Deadline 类中覆盖 @ToString。例如:

class Deadline {

...

  @Override
  public String toString() {
      return this.deadline.toString();
  }
}

【讨论】:

    【解决方案2】:

    您需要的是正确的toString() 方法和星期几的本地化名称。

    您可以通过使用方法getDisplayName(TextStyle, Locale) 来实现,我将在下面的代码中展示。

    阅读你的作业任务还有另一件事:

    截止日期不能在周六或周日 - 如果发生这种情况,将抛出 (IllegalArgumentException) 异常以及有关不适当日期的消息(格式为 dd.mm.yyyy)。 p>

    ==> 没有抛出IllegalArgumentException,甚至没有检查代码中的无效工作日。这个Exception不会神奇地出现,你必须实现它。

    这里是一些示例解决方案:

    import java.time.DayOfWeek;
    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    import java.time.format.TextStyle;
    import java.util.Locale;
    
    public class Deadline {
    
        private LocalDate deadline;
    
        public Deadline(LocalDate deadLine) {
            // check if the given date is a Saturday or Sunday and throw the desired Exception
            if (deadLine.getDayOfWeek() == DayOfWeek.SATURDAY 
                    || deadLine.getDayOfWeek() == DayOfWeek.SUNDAY) {
                throw new IllegalArgumentException("The deadline to be set is not valid ("
                        + deadLine.getDayOfWeek()
                                .getDisplayName(TextStyle.FULL_STANDALONE, Locale.getDefault())
                        + ", "
                        + deadLine.format(DateTimeFormatter.ofPattern("dd.MM.yyyy"))
                        + "). Please provide a deadline which is a weekday.");
            } else {
                // otherwise just set the deadline
                this.deadline = deadLine;
            }
        }
    
        public LocalDate getDeadline() {
            return deadline;
        }
    
        public void setDeadline(LocalDate deadline) {
            if (deadline.getDayOfWeek() == DayOfWeek.SATURDAY 
                    || deadline.getDayOfWeek() == DayOfWeek.SUNDAY) {
                throw new IllegalArgumentException("The deadline to be set is not valid ("
                        + deadline.getDayOfWeek()
                                .getDisplayName(TextStyle.FULL_STANDALONE, Locale.getDefault())
                        + ", "
                        + deadline.format(DateTimeFormatter.ofPattern("dd.MM.yyyy"))
                        + "). Please provide a deadline which is a weekday.");
            } else {
                this.deadline = deadline;
            }
        }
    
        @Override
        public String toString() {
            return deadline.getDayOfWeek()
                        .getDisplayName(TextStyle.FULL_STANDALONE, Locale.getDefault()) 
                    + ", "
                    + deadline.format(DateTimeFormatter.ISO_LOCAL_DATE);
        }
    
        public static void main(String[] args) {
            // this is now a Saturday, which will throw the IllegalArgumentException
            Deadline first = new Deadline(LocalDate.parse("2017-02-04"));
            System.out.println(first.toString());
        }
    }
    

    请注意,您不一定必须使用 enum DayOfWeek 的本地化显示名称,但这样做可能会有用。您也可以在参数化构造函数中调用setDeadline(deadline),而不是在那里编写相同的错误处理,但如果您决定不这样做,则必须保留冗余代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多