java.text.ParseException:不可解析的日期:";23《2021年马尔佐法案》;

java.text.ParseException:不可解析的日期:";23《2021年马尔佐法案》;,java,spring,Java,Spring,我有一个以字符串类型出现的日期,如下所示: String fecha = "23 de marzo de 2021"; String resultado = "23-03-2021"; 但我想更改日期如下: String fecha = "23 de marzo de 2021"; String resultado = "23-03-2021"; 我尝试使用以下选项,但无法: try { Simple

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

String fecha = "23 de marzo de 2021";
String resultado = "23-03-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);
}
  • 为日期字符串使用正确的格式,即
    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
    
    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
    
    输出:

    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
    
    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
    
    请注意,
    java.util
    date-time API及其格式化API,
    SimpleDataFormat
    已经过时且容易出错。建议完全停止使用,并切换到*

    使用现代日期时间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
    
    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
    
    输出:

    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
    
    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的更多信息


    *无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。

    我投票结束这个问题,因为它不在我的讨论范围内English@Dharman-我已经把这三句话翻译成英语,代码保持原样。@ArvindKumarAvinash我明白了,但我们真的不应该翻译问题。下次请把它们关上。我不认为这个问题将来会很有用。也许你知道可以用一个副本来结束这个问题?@Dharman-没有确切的副本,例如,正如在这篇评论中提到的,与我搜索的重复目标不同。嗨@DANIEL,翻译是否准确地反映了你的话/问题?提问者有责任用英语在堆栈溢出上发帖,而不是回答者的特权。请不要回答非英语问题。它们与堆栈溢出无关,必须以“需要澄清”或“不合适”的理由关闭