如何正确使用getDayOfWeek方法

时间:2019-04-23 13:05:12

标签: java localdate

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

创建一个具有以下内容的对象类:

  • LocalDate数据类型的私有实例字段,称为截止日期
  • 实例化字段的构造函数
  • 一种获取方法
  • 设置方法

最后期限不能在星期六或星期日-如果发生这种情况,则会抛出(IllegalArgumentException)异常,并显示有关日期不正确的消息(格式为dd.mm.yyyy)。在适当和不适当的期限内演示该方法。提示:使用getDayOfWeek方法显示星期几。

我有一个问题,我真的不明白如何正确使用getDayOfWeek方法,当然我尝试从这一方面进行编程,但是我的输出是:<form method="post"> {{ csrf_field() }} or @csrf ...

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

Deadline@2d554825

这是我的代码:

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

2 个答案:

答案 0 :(得分:0)

首先,如果您想知道星期几的名称,请执行以下操作:

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();
  }
}

答案 1 :(得分:0)

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

您可以使用方法getDisplayName(TextStyle, Locale)来实现这一点,我将在下面的代码中显示该方法。

阅读分配任务还有另一件事:

  

最后期限不能在星期六或星期日-如果发生这种情况,则会抛出(IllegalArgumentException)异常,并显示有关日期不正确的消息(格式为dd.mm.yyyy)。

==>不会抛出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)而不是在此处编写相同的错误处理,但是如果您决定不这样做,则必须保留冗余代码。