【问题标题】:How to pass LocalDate as an argument? [closed]如何将 LocalDate 作为参数传递? [关闭]
【发布时间】:2021-10-06 20:28:57
【问题描述】:

我正在尝试使用LocalDate Java 类并将其作为方法中的参数传递。当我在 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,所以您不能将String ("2019-08-16") 传递给它。相反,您首先需要使用String 创建一个LocalDate,如下所示:LocalDate.parse("2019-08-16")
  • dd.localDate(LocalDate.parse("2019-08-16"));?
  • '2019-08-16' it says too many literals 建议您使用更高级的语言功能,而无需掌握可用的类型等语言基础知识。例如char 类型代表字符,它的 可以像'a' 一样创建,例如char someCharacter = 'a';。注意char 一次只能表示一个 字符,所以我们不能写char someCharacter = 'ab';,因为那是两个字符。目前我的建议是从基础开始学习 Java,然后转向面向对象的概念。
  • 谢谢 Jacob、Dan 和 Pshemo,它成功了
  • 这个问题完全可以重现,并且没有任何错字。投票重新开放。

标签: java string char java-time localdate


【解决方案1】:

TL;DR

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

为什么会这样?

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    虽然我建议考虑重命名函数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"));
        }
    }
    

    应该像 cmets 建议的那样工作。

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 2021-11-14
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      相关资源
      最近更新 更多