当前位置: 首页 > 面试题库 >

Java:不可解析的日期异常

葛成双
2023-03-14
问题内容

尝试转换日期格式时,出现一个异常:日期不可解析,并且不知道如何解决此问题。

我收到一个表示事件日期的字符串,并希望在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();

是假的。我想要以下格式的日期字符串:

dd.MM.yyyy HH:mm:ss

输入的String示例如下:

2010-01-04 01:32:27 UTC

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

谢谢!

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

替代文字http://img683.imageshack.us/img683/193/dateproblem.png

#更新 我运行

String[] timezones = TimeZone.getAvailableIDs();

数组中有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";
    }
}

但是我仍然希望在不减少时区的情况下转换原始输入。

该代码是使用JDK 1.6为Android手机编写的。


问题答案:

您在这里基本上要做的就是依靠Date#toString()已经具有固定模式的文件。要将Java
Date对象转换为其他人类可读的String模式,您需要SimpleDateFormat#format()

private String modifyDateLayout(String inputDate) throws ParseException{
    Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate);
    return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date);
}

顺便说一句,“不可解析的日期”异常在这里 只能
由抛出SimpleDateFormat#parse()。这意味着inputDate不在预期的模式中"yyyy- MM-dd HH:mm:ss z"。您可能需要html" target="_blank">修改模式以匹配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版本?检查TimeZone.getAvailableIDs()UTC两者之间必须有一个。



 类似资料:
  • 问题内容: 我正在尝试用正斜杠替换连字符,但结果是 我具有要转换的必要值,有人可以告诉我为什么它返回错误吗?另外,我想在格式的末尾附加一个,可以吗? 问题答案: 您需要先解析为正确的格式作为输入 然后您可以使用format()以其他格式打印它 并且不要期望类的方法返回格式化值,这是固定的实现

  • 问题内容: 我正在尝试使用解析日期时间字符串,但我一直收到不可解析的日期异常。 这是我尝试解析的日期格式: 这是我正在使用的代码: 返回此错误: 据我所知,这是使用SimpleDateFormat类的正确方法,但是我不精通Java,所以我可能会弄错。有人知道我的问题是什么吗? 问题答案: 时区应为GMT-08:00或-0800(如Madcore Tom所说)。请参阅Java文档。 在Java 7中

  • 当我试图解析发送到android客户端的日期字符串时,我得到了一个不可解析的日期。 这是个例外:

  • 我尝试将字符串转换为日期。

  • 我有一个需求,当我把日期从一种格式转换成另一种格式时,我可能会得到一个无法解析的日期异常。下面粘贴了该类的代码

  • 问题内容: 代码如下所示: 在上面的代码中,抛出不可解析的日期异常: 我不知道原因。 问题答案: 为什么要将日期转换为字符串并将其解析回日期? 代码失败的原因是因为您试图使用仅接受dd-MMM-yyy格式的日期的格式化程序转换完整日期。