使用Java8将字符串转换为日期

16

我正在尝试使用Java 8将字符串按照特定格式转换为日期。以下是我的代码。即使指定了格式模式为MM/dd/yyyy,但我收到的输出仍然是yyyy/DD/MM格式。有人能指出我做错了什么吗?

    String str = "01/01/2015";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
    LocalDate dateTime = LocalDate.parse(str, formatter);
    System.out.println(dateTime);

1
你还需要一个格式化程序来处理输出,假设你期望以特定的格式进行输出。 - Elliott Frisch
1
LocalDate 没有自己的格式(它的 toString 方法只是提供有关其表示值的有用信息),您需要使用不同的格式化程序将 LocalDate 格式化回您想要的格式的 String。在概念上类似于 这个 - MadProgrammer
@MadProgrammer 但是调用这个函数的方法返回类型是Date。 - user3509208
那么?当展示值的时候,你不应该关心LocalDate#toString生成的格式,然后你可以对其进行格式化,否则,你根本不需要关心它,它只是一个表示某个时间点的容器类。 - MadProgrammer
是的,我的日期是正确的,只是格式不对。 - user3509208
显示剩余4条评论
3个回答

11

这是因为您正在使用toString方法,该方法说明:

输出将采用 ISO-8601 格式uuuu-MM-dd。

您传递给LocalDate.parseDateTimeFormatter仅用于创建一个LocalDate,但它并未与创建的实例“关联”。您需要像这样使用LocalDate.format方法

String str = "01/01/2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate dateTime = LocalDate.parse(str, formatter);
System.out.println(dateTime.format(formatter)); // not using toString

5
你可以使用SimpleDateFormat类来实现这个目的。 将你想要的日期格式作为参数初始化SimpleDateFormat对象。
String dateInString = "27/02/2016"
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(dateInString);

3

LocalDate是一个日期对象。它不是一个字符串对象,因此它显示日期输出字符串的格式取决于toString实现。

你已经正确地将它转换为LocalDate对象,但如果你想以特定的字符串格式显示日期对象,你需要相应地进行格式化:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
System.out.println(dateTime.format(formatter))

通过提供格式化程序,您可以将日期转换为任何您想要的字符串格式。


你会推荐 Java8 中使用其他东西来满足我的需求吗?因为我需要将字符串转换为格式为 mm/dd/yyyy 的日期并存储到我的数据库中。建议不使用 LocalDate 吗? - user3509208
不错,你的代码正确地将其存储在数据库中。大多数数据库都支持日期。它们会在内部以毫秒为单位存储它。当您进行查询时,它们会以特定格式显示给您。这并不意味着日期以该格式存储。 - Ankit Bansal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接