将带有日期的字符串转换为其他格式

问题描述 投票:0回答:2

我有一个 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));

我收到错误,但我不确定如何获得我想要的?

将来我希望能够以字符串应该能够格式化的其他类型的格式发送。

java date
2个回答
1
投票
  1. 您正在使用过时的 API。别再这样做了。正确的课程位于

    java.time

  2. 显然,您在这里需要
  3. 2

    格式。一读,一写。您的代码的行为就像只有一个。这显然行不通。

  4. 解决方案:

创建 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

    


0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.