我有一个日期,它以字符串类型出现,如下所示:
String fecha = "23 de marzo de 2021";
但我想更改日期如下:
String resultado = "23-03-2021";
我尝试使用以下内容,但不能:
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("23 de marzo de 2021");
System.out.println("Fecha --->" + date1);
} catch (Exception e) {
System.out.println(e);
}
- 使用正确的格式
dd 'de' MMMM 'de' yyyy
作为日期字符串 - 始终将
Locale
与日期时间格式化/解析API一起使用
演示:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdfInput = new SimpleDateFormat("dd 'de' MMMM 'de' yyyy", new Locale("es", "ES"));
Date date1 = sdfInput.parse("23 de marzo de 2021");
// Default string i.e. Date#toString implementation
System.out.println(date1);
// Custom string
SimpleDateFormat sdfOutput = new SimpleDateFormat("dd-MM-yyyy", new Locale("es", "ES"));
System.out.println(sdfOutput.format(date1));
}
}
输出:
Tue Mar 23 00:00:00 GMT 2021
23-03-2021
请注意,java.util
日期时间API及其格式API、SimpleDateFormat
已过时且为错误产品。建议完全停止使用它们,并切换到现代日期时间API*。
使用现代日期时间API:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("dd 'de' MMMM 'de' uuuu", new Locale("es", "ES"));
LocalDate date1 = LocalDate.parse("23 de marzo de 2021", dtfInput);
// Default string i.e. LocalDate#toString implementation
System.out.println(date1);
// Custom string
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("dd-MM-uuuu", new Locale("es", "ES"));
System.out.println(dtfOutput.format(date1));
}
}
输出:
2021-03-23
23-03-2021
从跟踪:日期时间了解有关现代日期时间API的更多信息。
*出于任何原因,如果您必须坚持使用Java 6或Java 7,您可以使用ThreeTen Backport将Java.time的大部分功能向后移植到Java 6&7.如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查通过desugaring和如何在Android项目中使用ThreeTenABP提供的Java 8+API