Java - 如何使用 LocalDate 获取正确的日期格式



我一直无法将日期正确格式化为 dd-MM-YYYY。

当我按年-月-日或年-日-月的顺序排列字符串日期字符串时,它允许格式化日期。

它似乎只在 yearParsed String 时有效,就像在 dateString 的乞求处一样。

尝试使用DateTimeFormatter.ofPattern("dd-MM-YYYY")似乎不会影响日期,因此看起来我没有正确使用它。

你能告诉我我做错了什么吗?

用户一次输入一个日、月和一年,我希望输出日期为:01-12-2000。如果日期或月份输入为个位数,则 if/else 可以在前面添加"0"。

任何帮助将不胜感激。

谢谢!

String yearParsed = String.valueOf(year);
String monthParsed;
String dayParsed;
if (dayString.length() == 1) {         
dayParsed = "0" + String.valueOf(day); 
}
else {
dayParsed = String.valueOf(day);
}
if (monthString.length() == 1) {         
monthParsed = "0" + String.valueOf(month);        
}
else {
monthParsed = String.valueOf(month);
}

String dateString = yearParsed + "-" + monthParsed + "-" + dayParsed;
//String dateString = dayParsed + "-" + monthParsed + "-" + yearParsed;
System.out.println("dateString " + dateString);

LocalDate formattedDate = null;  
DateTimeFormatter dateTimeFormatter;  
dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
//dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-YYYY");
formattedDate = formattedDate.parse(String.format(dateString, dateTimeFormatter));
System.out.println("Formatted Date = " + formattedDate);

关于您的变量LocalDate formattedDate,您误解了格式化日期的概念。

格式化日期是字符串,因为您可以控制其格式。

当对象是LocalDate实例时,它包含用于确定时间位置的值,当您打印它时,它具有其默认格式,您想要一种特定的格式,您需要日期的字符串表示形式

<小时 />
String year = "2021", dayString = "1", monthString = "3";
LocalDate date = LocalDate.of(
Integer.parseInt(year),
Integer.parseInt(monthString),
Integer.parseInt(dayString)
);
System.out.println(date); // 2021-03-01
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-yyyy");
String formattedDate = date.format(dtf);
System.out.println("Formatted Date = " + formattedDate); // Formatted Date = 01-03-2021

您使用了Y(基于周的年份)而不是y(时代年份)。从文档和此问题的答案中了解差异。

只需创建一个包含年、月和日的LocalDate,并使用DateTimeFormatter将其格式化为String

演示:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
int day = 12, month = 6, year = 2021;
LocalDate date = LocalDate.of(year, month, day);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-uuuu", Locale.ENGLISH);
String formatted = dtf.format(date);
System.out.println(formatted);
}
}

输出:

2021-06-12

在线演示

在这里,您可以使用y而不是u但我更喜欢u而不是y

要了解有关现代日期-时间 API 的更多信息,请参阅跟踪:日期时间

注意

LocalDate应该表示日期单位(年、月、日),而不是特定格式。LocalDate#toString使用的默认格式基于 ISO 8601 标准。对于特定格式,您需要将其格式化为String,如上所示。这就像将double d = 5.0表示为5.000,这是通过将d格式化为这种格式的String来完成的。

public class Main {
public static void main(String[] args) {
double d = 5.0;
NumberFormat formatter = new DecimalFormat("#0.000");
String formatted = formatter.format(d);
System.out.println(formatted);
}
}

输出

5.000

相关内容

  • 没有找到相关文章

最新更新