59

我在尝试以下代码时遇到解析异常:

    String date="Sat Jun 01 12:53:10 IST 2013";
    SimpleDateFormat sdf=new SimpleDateFormat("MMM d, yyyy HH:mm:ss");
    Date currentdate;
    currentdate=sdf.parse(date);
    System.out.println(currentdate);

例外:

线程“main”java.text.ParseException 中的异常:无法解析的日期:com.ibm.icu.text.DateFormat.parse(DateFormat.java:510) 的“Sat Jun 01 12:53:10 IST 2013”

输入:Sat Jun 01 12:53:10 IST 2013

预期输出:Jun 01,2013 12:53:10

如何解决这个问题?

4

9 回答 9

121

您的模式根本不对应于输入字符串......它不起作用也就不足为奇了。这可能会更好:

SimpleDateFormat sdf = new SimpleDateFormat("EE MMM dd HH:mm:ss z yyyy",
                                            Locale.ENGLISH);

然后要使用您需要的格式打印,您需要第二个 SimpleDateFormat:

Date parsedDate = sdf.parse(date);
SimpleDateFormat print = new SimpleDateFormat("MMM d, yyyy HH:mm:ss");
System.out.println(print.format(parsedDate));

笔记:

  • 您应该包括区域设置,就好像您的区域设置不是英语一样,日期名称可能无法识别
  • IST 不明确,可能会导致问题,因此您应该尽可能在输入中使用正确的时区名称。
于 2013-06-01T09:52:41.163 回答
8
        String date="Sat Jun 01 12:53:10 IST 2013";
        SimpleDateFormat sdf=new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy");
        Date currentdate=sdf.parse(date);
        SimpleDateFormat sdf2=new SimpleDateFormat("MMM dd,yyyy HH:mm:ss");
        System.out.println(sdf2.format(currentdate));
于 2013-06-01T10:02:44.707 回答
6

图案不对

    String date="Sat Jun 01 12:53:10 IST 2013";
    SimpleDateFormat sdf=new SimpleDateFormat("E MMM dd hh:mm:ss Z yyyy");
    Date currentdate;
    currentdate=sdf.parse(date);
    System.out.println(currentdate);
于 2013-06-01T09:52:31.140 回答
3

将您的格式更新为:

SimpleDateFormat sdf=new SimpleDateFormat("E MMM dd hh:mm:ss Z yyyy");
于 2013-06-01T09:53:13.387 回答
3
于 2018-05-24T06:10:47.567 回答
2

我找到了简单的解决方案来获取当前日期而没有任何解析错误。

Calendar calendar;
calendar = Calendar.getInstance();
String customDate = "" + calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DAY_OF_MONTH);
于 2015-09-12T07:29:39.173 回答
1

检查您的模式 (DD-MMM-YYYY) 和 parse("29-11-2018") 方法的输入。解析方法的输入应遵循:DD-MMM-YYYY i,e. 2019 年 8 月 21 日

在我的代码中:

String pattern = "DD-MMM-YYYY";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

    try {
        startDate = simpleDateFormat.parse("29-11-2018");// here no pattern match 
        endDate = simpleDateFormat.parse("28-AUG-2019");// Ok 
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
于 2019-08-08T12:11:00.697 回答
1
String date="Sat Jun 01 12:53:10 IST 2013";

SimpleDateFormat sdf=new SimpleDateFormat("MMM d, yyyy HH:mm:ss");

此模式与您的输入字符串不符,会发生异常

您需要使用以下模式来完成工作。

E MMM dd HH:mm:ss z yyyy

以下代码将帮助您跳过异常

SimpleDateFormat使用

    String date="Sat Jun 01 12:53:10 IST 2013"; // Input String

    SimpleDateFormat simpleDateFormat=new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy"); // Existing Pattern

    Date currentdate=simpleDateFormat.parse(date); // Returns Date Format,

    SimpleDateFormat simpleDateFormat1=new SimpleDateFormat("MMM dd,yyyy HH:mm:ss"); // New Pattern

    System.out.println(simpleDateFormat1.format(currentdate)); // Format given String to new pattern

    // outputs: Jun 01,2013 12:53:10
于 2018-07-23T14:16:54.050 回答
-1

我需要在ParsePosition类的 parse 方法中添加一个表达式SimpleDateFormat

simpledateformat.parse(mydatestring, new ParsePosition(0));
于 2016-08-25T22:36:44.803 回答