java.text.ParseException: unparseable date: "23 de marzo de 2021"



我有一个日期,它以字符串类型出现,如下所示:

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);
}
  1. 使用正确的格式dd 'de' MMMM 'de' yyyy作为日期字符串
  2. 始终将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 BackportJava.time的大部分功能向后移植到Java 6&7.如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查通过desugaring和如何在Android项目中使用ThreeTenABP提供的Java 8+API

相关内容

最新更新