解析日期格式时出现异常

时间:2013-06-07 06:14:21

标签: java date

我的日期格式如下

//输入日期

Thu Jun 06 2013 00:00:00 GMT+0530 (India Standard Time)

//输出日期格式

I want to change this to "dd-mm-yyyy, hh:mm:ss".

我从db获取输入日期格式。我必须将其更改为输出日期格式,我将在网格中显示它。

我尝试了以下代码。

DateFormat outputDate = new SimpleDateFormat("dd-mm-yyyy, hh:mm:ss"); 
                try
                {
                    Date date = outputDate.parse(facade.getDate.toString()); **//getting exception here**
                    outputDate = new SimpleDateFormat("dd-mm-yyyy, hh:mm:ss");
                    Date date1 = new SimpleDateFormat("dd-mm-yyyy, hh:mm:ss").parse(outputDate
                            .format(date));
                    facade.setDate(date1);
                }catch (ParseException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

我正在

java.text.ParseException: Unparseable date: "2013-06-06 00:00:00.0".

任何帮助..

5 个答案:

答案 0 :(得分:1)

"2013-06-06 00:00:00.0""dd-mm-yyyy, hh:mm:ss"不匹配,您的格式应为"dd-MM-yyyy hh:mm:ss"

但是,查看您的代码我猜facade.getDate实际上是java.sql.Timestamp,它继承自java.util.Date,因此您可以直接将其传递给类似的格式

new SimpleDateFormat("dd-MM-yyyy, hh:mm:ss").format(facade.getDate)

答案 1 :(得分:1)

以下是一些适用于我的代码:

import java.text.*;
import java.util.*;

public class Test {
    public static void main(String[] args) throws Exception {
        String input = "Thu Jun 06 2013 00:00:00 GMT+0530 (India Standard Time)";
        DateFormat inputFormat = new SimpleDateFormat("E MMM dd yyyy HH:mm:ss 'GMT'z",
                                                      Locale.ENGLISH);
        Date date = inputFormat.parse(input);

        DateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss",
                                                       Locale.ENGLISH);
        outputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

        String output = outputFormat.format(date);
        System.out.println(output);
    }
}

需要考虑的事项:

  • 您需要计算出输出时区。目前我已将它设置为UTC,但这可能不是您想要的。
  • 你真的需要退一步思考问题。你显然有两种不同的格式 - 你试图从一种格式转换为另一种格式。因此,使用相同的格式创建三个不同的SimpleDateFormat对象永远不会起作用。
  • 您需要仔细阅读文档... SimpleDateFormatM表示月份,m表示分钟; h使用12小时制,H使用24小时制。

这假设您实际上需要以字符串开头。如果getDate已经是DateTimestamp,则可以忽略第一部分 - 只需使用上述代码的输出部分即可。您应该尽可能避免不必要的字符串转换。

请注意,dd-MM-yyyy是一种略微异常格式 - 您确定实际上并不希望yyyy-MM-dd更常见(并且可排序)吗?

答案 2 :(得分:0)

DateFormat outputDate = new SimpleDateFormat("yyyy-dd-mm hh:mm:ss");
try {
    Date date = outputDate.parse("2013-06-06 00:00:00.0");
    System.out.println(new SimpleDateFormat("dd-mm-yyyy, hh:mm:ss").format(date));
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

运作良好,第1行不正确。您的SimpleDateFormat.parse需要采用输入日期的确切格式。然后你想以不同的格式输出它,所以你再制作一个并设置格式,然后调用SimpleDateFormat.format(date),然后在其上放一个println。

答案 3 :(得分:0)

错误就在这里

DateFormat outputDate = new SimpleDateFormat("dd-mm-yyyy, hh:mm:ss"); 

模式应该等于Thu Jun 06 2013 00:00:00 GMT+0530 (India Standard Time)。不要出你的字符串模式。

答案 4 :(得分:0)

@Test
public void test() throws ParseException {
    SimpleDateFormat sdf_org = new SimpleDateFormat("E MMM dd yyyy HH:mm:ss 'GMT'Z", Locale.ENGLISH);
    Date d = sdf_org.parse("Thu Jun 06 2013 00:00:00 GMT+0530");
    SimpleDateFormat sdf_target = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss.SSS");

    System.out.println(sdf_target.format(d));
}

输出控制台:2013-30-06 03:30:00.000