我有一个 dd-MM-yyyy 格式的字符串,我想将其转换为 yyyy-MM-dd。
我无法让这个工作。
示例:
String format = "yyyy-MM-dd";
String dateToFormat = "dd-MM-yyyy";
SimpleDateFormat outputFormat = new SimpleDateFormat(format);
Date date = new Date(dateToFormat);
System.out.println(outputFormat.format(date));
我收到错误,但我不确定如何获得我想要的?
将来我希望能够以字符串应该能够格式化的其他类型的格式发送。
您正在使用过时的 API。别再这样做了。正确的课程位于
java.time
。
格式。一读,一写。您的代码的行为就像只有一个。这显然行不通。
创建 2 个 DateTimeFormatter 对象。调用
LocalDate.parse
,提供您的输入字符串和描述输入格式的 DTF,以获得表示“2024 年第 3 个月的第 12 天”概念或您的输入表示的任何内容的 LDT 实例。
然后,在该对象上调用.format()
,传递表示所需输出格式的 DTF 实例。这会生成一个字符串,以您指定的格式呈现该概念(“2024 年第 3 个月的第 12 天”或您拥有的任何内容):
DateTimeFormatter readFormat = DateTimeFormatter.ofPattern("d-M-yyyy", Locale.ENGLISH);
DateTimeFormatter writeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
String input = "5-3-2024";
LocalDate asDate = LocalDate.parse(input, readFormat);
System.out.println("Date = " + asDate.format(writeFormat));
打印
2024-03-05
。
java.time
而不是早已过时的类
java.util.Date
和 java.text.SimpleDateFormat
。这是一个以多种不同格式输出今天日期的示例:
public static void main(String[] args) {
// some example patterns that match a date without time of day
List<String> patterns = List.of(
"uuuu-MM-dd", "uuuu-dd-MM", "dd-MM-uuuu", "EEE, MMM d uuuu"
);
// get today as java.time.LocalDate
LocalDate today = LocalDate.now();
// format it according to each pattern
patterns.forEach(pattern -> {
System.out.println(
today.format(
DateTimeFormatter.ofPattern(
pattern, Locale.ENGLISH
)
)
);
});
}
DateTimeFormatter
采用模式
String
以及 Locale
并传递给方法 LocalDate.format(…)
。结果是String
。示例的输出(今天:2024-03-05):
2024-03-05
2024-05-03
05-03-2024
Tue, Mar 5 2024