Java - 如何使用 LocalDate 获取正确的日期格式
Java - How to get the correct date format with LocalDate
我一直无法正确地将日期格式化为 dd-MM-YYYY。
当我按年-月-日或年-日-月的顺序排列 String dateString 时,它允许对日期进行格式化。
似乎只有在 dateString 开头的 yearParsed String 时才有效。
尝试使用 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
,您误解了格式化日期的概念。
A formatted date is a String, because you can control it's format.
当对象是LocalDate
实例时,它包含确定时间位置的值,当你只是打印它时它有它的默认格式,你想要一个特定格式 你需要一个 String 表示你的日期
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
(年份)。从 documentation and from answers to .
中了解差异
只需创建一个包含年月日的 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
但 .
了解有关现代日期时间 API 的更多信息
我一直无法正确地将日期格式化为 dd-MM-YYYY。
当我按年-月-日或年-日-月的顺序排列 String dateString 时,它允许对日期进行格式化。
似乎只有在 dateString 开头的 yearParsed String 时才有效。
尝试使用 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
,您误解了格式化日期的概念。
A formatted date is a String, because you can control it's format.
当对象是LocalDate
实例时,它包含确定时间位置的值,当你只是打印它时它有它的默认格式,你想要一个特定格式 你需要一个 String 表示你的日期
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
(年份)。从 documentation and from answers to
只需创建一个包含年月日的 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
但