3

我有时间戳,03-AUG-12 08.15.00.000000000 PM -05:00 我无法Stringyyyy-MM-dd HH:mm:ss.

这是我的代码:

public static void convert() {

    String oldstring = "03-AUG-12 08.15.00.000000000 PM -05:00";
    Date date = null;
    try {
        date = new SimpleDateFormat("dd-MMM-yy HH.mm.ss.S aa").parse(oldstring);
    }
    catch (ParseException e) {
        e.printStackTrace();
    }

    String newstring = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
    System.out.println(newstring);
}

基本上它是来自 Oracle 数据库的具有时区格式的时间戳。

4

3 回答 3

4

您不能使用 SimpleDateFormat 解析这样的字符串,至少并非没有一些限制:

  • Java 7 之前不支持像 -05:00(根据 ISO 8601)这样的时区指示符。使用 Java 7,您可以使用 XXX 模式来解析它。

  • 要正确解析月份名称,您应该指定您需要英语语言环境。

  • 毫秒 (S) 模式解析无限数量的数字。如果您的字符串包含“08.15.00.100000000”,SimpleDateFormat 会将其解析为 8:15:00 和 100000000 毫秒,从而为预期值增加近 28 小时。如果您确定该值始终为 0,则可以忽略此问题。

如果您可以接受最后一个问题并使用 Java 7,那么您应该使用如下内容:

new SimpleDateFormat("dd-MMM-yy hh.mm.ss.S aa XXX", Locale.ENGLISH)

于 2012-05-04T16:22:35.557 回答
3

像这样改变这一行:

        date = new SimpleDateFormat("dd-MMM-yy hh.mm.ss.S aa").parse(oldstring);

您需要使用h解析 AM/PM 小时 1-12 的小写字母。

于 2012-05-04T16:11:26.293 回答
1
于 2016-09-05T21:59:38.633 回答