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

ONLINE DEMO

在这里,您可以使用 y 而不是 u.

Trail: Date Time.

了解有关现代日期时间 API 的更多信息