Java:不可解析的日期异常

Java:不可解析的日期异常,java,date,format,Java,Date,Format,在尝试转换日期格式时,我遇到了一个异常:无法解析日期,不知道如何解决此问题 我收到一个表示事件日期的字符串,希望在GUI中以不同格式显示该日期 我想做的是: private String modifyDateLayout(String inputDate){ try { //inputDate = "2010-01-04 01:32:27 UTC"; Date date = new SimpleDateFormat("yyyy-MM

在尝试转换日期格式时,我遇到了一个异常:无法解析日期,不知道如何解决此问题

我收到一个表示事件日期的字符串,希望在GUI中以不同格式显示该日期

我想做的是:

private String modifyDateLayout(String inputDate){
        try {
            //inputDate = "2010-01-04 01:32:27 UTC";
            Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate);
            return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
        } catch (ParseException e) {
            e.printStackTrace();
            return "15.01.2010";
        }
    }
不管怎样,这条线

String modifiedDateString = originalDate.toString();
他是个哑巴。我希望获得以下格式的日期字符串:

年月日HH:MM:ss

输入字符串示例如下所示:

private String modifyDateLayout(String inputDate){
        try {
            //inputDate = "2010-01-04 01:32:27 UTC";
            Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate);
            return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
        } catch (ParseException e) {
            e.printStackTrace();
            return "15.01.2010";
        }
    }
2010-01-04 01:32:27 UTC

有人知道如何将上面的示例日期(字符串)转换为字符串格式dd.MM.yyyy HH:MM:ss吗

谢谢大家!

编辑:我修复了错误的输入日期格式,但仍然不起作用。上面是粘贴方法,下面是调试会话的屏幕图像

#更新 我跑

数组中有UTC字符串。这是个奇怪的问题

我做了一个肮脏的黑客程序:

private String modifyDateLayout(String inputDate){
    try {
        inputDate = inputDate.replace(" UTC", "");
        Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(inputDate);
        return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
    } catch (ParseException e) {
        e.printStackTrace();
        return "15.01.2010";
    }
}
但我仍然希望在不切断时区的情况下转换原始输入


这段代码是为使用JDK1.6的Android手机编写的。

基本上您在这里所做的是依赖于已经有固定模式的Android手机。要将Java
Date
对象转换为另一个人类可读的字符串模式,您需要

顺便说一句,“不可解析的日期”异常只能在这里引发。这意味着,
inputDate
不在预期模式下
“yyyy-MM-dd HH:MM:ss z”
。您可能需要修改模式以匹配
inputDate
的实际模式

更新:好的,我做了一个测试:

public static void main(String[] args) throws Exception {
    String inputDate = "2010-01-04 01:32:27 UTC";
    String newDate = new Test().modifyDateLayout(inputDate);
    System.out.println(newDate);
}
这将正确打印:

03.01.2010 21:32:27
(我在GMT-4上)


更新2:根据您的编辑,您确实得到了一个
ParseException
。最可疑的部分将是
UTC
的时区。这在Java环境中是已知的吗?您使用的是什么Java版本和什么OS版本?检查。必须有一个
UTC

我在Talend工作时遇到了这个错误。我能够毫无问题地存储从Redshift创建的S3CSV文件。错误发生在我试图将相同的S3CSV文件加载到Amazon RDS MySQL数据库时。我尝试了默认的timestamp-Talend-timestamp格式,但它们在加载到MySQL时引发了异常:无法解析的日期

来自公认答案的这一点帮助我解决了这个问题:

顺便说一下,“不可解析的日期”异常只能由SimpleDataFormat#parse()引发。这意味着inputDate不在预期的模式“yyyy-MM-dd HH:MM:ss z”中。您可能需要修改模式以匹配inputDate的实际模式

我的解决方案的关键是更改Talend模式。Talend将时间戳字段设置为“date”,所以我将其更改为“timestamp”,然后将“yyyy-MM-dd-HH:MM:ss-z”插入到格式字符串列视图的屏幕截图中

我在12小时和24小时时间戳转换方面还有其他问题,直到我在时间戳字符串的末尾添加了“z”。

从Oracle文档中,方法转换为特定形式的字符串-不要在日期对象上使用toString方法。尝试使用:

String stringDate = new SimpleDateFormat(YOUR_STRING_PATTERN).format(yourDateObject);
下一步是解析stringDate to Date:

Date date = new SimpleDateFormat(OUTPUT_PATTERN).parse(stringDate);

注意,方法抛出ParseException

问题在于行日期=formatter.parse(inputDate);抛出异常。我将输入格式固定为yyyy-MM-dd HH:MM:ss z,但它仍然引发异常。我希望看到在您发表评论之前添加的我的编辑。如果您想在找到正确模式方面获得更多帮助,您需要发布一个实际
inputDate
值的示例。我很难解析此日期:“2011年10月11日06:03:19 p.m.”如果您的日期格式为“T”(例如“2018-01-31T16:01:49”),请使用此日期格式DateTimeFormatter.of模式(“yyy-MM-dd'T:HH:MM:ss”)我知道这是一个很久以前的线程,但为了澄清关于“UTC”为日期格式时解析异常的疑问。Android中的代码被破坏了。
Date date = new SimpleDateFormat(OUTPUT_PATTERN).parse(stringDate);