0

我在将日期正确格式化为 dd-MM-YYYY 时遇到了问题。

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

它似乎只在 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);
4

2 回答 2

1

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

格式化的日期是 String,因为您可以控制它的格式。

当对象是一个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
于 2021-06-12T08:37:27.470 回答
1

您使用的是Y(week-based-year) 而不是y(year-of-era)。从文档和这个问题的答案中了解不同之处。

只需LocalDate使用年、月和日创建 a 并将其格式化为String使用 a DateTimeFormatter

演示:

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我更喜欢u使用y.

从Trail: Date Time了解有关现代日期时间 API 的更多信息。

于 2021-06-12T08:49:08.210 回答