如何将 LocalDate 作为参数传递?

How to pass LocalDate as an argument?

我正在尝试使用 LocalDate Java class 并将其作为方法中的参数传递。当我在 main 方法中实例化方法时,我需要将 LocalDate 作为参数传递,当我尝试 '2019-08-16' 时它说文字太多,当我尝试 "2019-08-16" 时它说无法应用至 String.

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class LocalDateExample {
    public void localDate(LocalDate date) {
        String dayOfMonth = Integer.toString(date.getDayOfMonth());
        System.out.println("Day Of Month is" + dayOfMonth); // this throws error
    }

    public static void main(String[] args) {
        LocalDateExample dd = new LocalDateExample();
        dd.localDate("2019-08-16"); // this line throws error
    }
}

尽管我建议考虑重命名函数 localDate(),尤其是当它要求 LocalDate 参数时:

public class LocalDateExample {
    public void localDate(LocalDate date) {
        String dayOfMonth = Integer.toString(date.getDayOfMonth());
        System.out.println("Day Of Month is " + dayOfMonth);
    }

    public static void main(String[] args) {
        LocalDateExample dd = new LocalDateExample();
        dd.localDate(LocalDate.parse("2019-08-16"));
    }
}

应该可以,正如评论所建议的那样。

TL;DR

    dd.localDate(LocalDate.of(2019, Month.AUGUST, 16));

为什么会这样?

由于您的方法被声明为接受 LocalDate 参数,因此您需要传递 LocalDate 的实例(不是字符串或任何其他类型)。 Java 没有自动类型转换,这就是它不适用于字符串的原因。

LocalDate 和其他类型的 java.time 有创建对象的工厂方法。最常用的工厂方法简单命名为 ofLocalDate 有两个重载的 of 方法。对于大多数目的,我更喜欢使用接受 Month 枚举常量作为中间参数的参数,如上例所示。另一个接受月份编号的 int(从 1 = 一月开始),因此以下内容也适用:

    dd.localDate(LocalDate.of(2019, 8, 16));

顺便说一下 '2019-08-16' 你遇到了一个不同的问题,因为单引号 ' 用于字符文字。 '2'是字符字面量,但需要表示一个字符,所以单引号之间不能有更多的字符。

最后,尽管您的代码中有注释,但以下行不会导致任何错误(因此我已更正此处的注释):

    System.out.println("Day Of Month is" + dayOfMonth); // this works fine