什么';这是错误的SimpleDataFormat解析 public static String Date()引发IOException { URL=新URL(目标); URLConnection conn=url.openConnection(); Map headers=conn.getHeaderFields(); Set keys=headers.keySet(); 字符串gmtTime=conn.getHeaderField(“日期”); gmtTime=gmtTime.replace(“GMT”,即“).trim(); SimpleDateFormat=新的SimpleDateFormat(“EEE,dd-MMM-yyyy-HH:mm:ss”); java.util.Date=null; 试一试{ 系统输出打印项次(gmtTime); date=format.parse(gmtTime); }捕获(解析异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } 返回gmtTime; } 2020年5月26日星期二07:08:22 java.text.ParseException:不可解析日期:“2020年5月26日星期二07:08:22” 位于java.base/java.text.DateFormat.parse(DateFormat.java:395) 在ex.Time.Date(Time.java:34) 在ex.ServerTime\u CMW.draw(ServerTime\u CMW.java:35) 位于processing.core.PApplet.handleDraw(PApplet.java:2482) 在processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1547) 在processing.core.PSurfaceNone$AnimationThread.run处(PSurfaceNone.java:313)

什么';这是错误的SimpleDataFormat解析 public static String Date()引发IOException { URL=新URL(目标); URLConnection conn=url.openConnection(); Map headers=conn.getHeaderFields(); Set keys=headers.keySet(); 字符串gmtTime=conn.getHeaderField(“日期”); gmtTime=gmtTime.replace(“GMT”,即“).trim(); SimpleDateFormat=新的SimpleDateFormat(“EEE,dd-MMM-yyyy-HH:mm:ss”); java.util.Date=null; 试一试{ 系统输出打印项次(gmtTime); date=format.parse(gmtTime); }捕获(解析异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } 返回gmtTime; } 2020年5月26日星期二07:08:22 java.text.ParseException:不可解析日期:“2020年5月26日星期二07:08:22” 位于java.base/java.text.DateFormat.parse(DateFormat.java:395) 在ex.Time.Date(Time.java:34) 在ex.ServerTime\u CMW.draw(ServerTime\u CMW.java:35) 位于processing.core.PApplet.handleDraw(PApplet.java:2482) 在processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1547) 在processing.core.PSurfaceNone$AnimationThread.run处(PSurfaceNone.java:313),java,Java,我不知道为什么会发生ParseException。。。 我的日期字符串是“2020年5月26日星期二07:08:22” 我认为的格式是“EEE,dd-MMM-yyyy HH:mm:ss”dd-MMM-yyyy不会在所有地区都适用。在美国,是的。在加拿大,没有。。。在加拿大,这不是一种合法的解析格式。如果您正在使用新的时间库来替换过时的java.util.Date类,那么可以通过将Locale.Root作为format调用的第二个参数来转义您的区域设置 编辑:在加拿大,我必须从银行pdf中格式化d

我不知道为什么会发生ParseException。。。 我的日期字符串是“2020年5月26日星期二07:08:22”
我认为的格式是“EEE,dd-MMM-yyyy HH:mm:ss”

dd-MMM-yyyy不会在所有地区都适用。在美国,是的。在加拿大,没有。。。在加拿大,这不是一种合法的解析格式。如果您正在使用新的时间库来替换过时的java.util.Date类,那么可以通过将Locale.Root作为format调用的第二个参数来转义您的区域设置

编辑:在加拿大,我必须从银行pdf中格式化dd-MMM-yyyy,并且我必须离开默认的区域设置来完成这项工作,并使用这个。当然是Java8时代。变形是这样的,我的其他日期调用可以工作,而无需传递区域设置。我可以传递另一个方法Locale.ROOT来获得难以捉摸的'dd-MMM-yyyy'格式

public static String Date() throws IOException
{
    URL url = new URL(target);
    URLConnection conn = url.openConnection();

    Map headers = conn.getHeaderFields();
    Set<String> keys = headers.keySet();
    String gmtTime = conn.getHeaderField("Date");
    gmtTime = gmtTime.replace("GMT", "").trim();
    SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss");
    java.util.Date date = null;
    try {
        System.out.println(gmtTime);
        date = format.parse(gmtTime); 
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return gmtTime;
}

Tue, 26 May 2020 07:08:22
java.text.ParseException: Unparseable date: "Tue, 26 May 2020 07:08:22"
at java.base/java.text.DateFormat.parse(DateFormat.java:395)
at ex.Time.Date(Time.java:34)
at ex.ServerTime_CMW.draw(ServerTime_CMW.java:35)
at processing.core.PApplet.handleDraw(PApplet.java:2482)
at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1547)
at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:313)

胡猜:在你的地方,星期二不是“星期二”?另外,我建议使用java.time DateTimeFormatter,LocalDateTime,还有更容易使用的SimpleDateFormat格式=新的SimpleDateFormat(“EEE,dd-MMM-yyy-HH:mm:ss”,Locale.ENGLISH);作品完成!!谢谢在这一点上,我想知道“May”是如何用您的语言编写的,因为它似乎是有效的。另外,看看这个答案frrom,看看如何在不使用过时的Java API的情况下做到这一点:只是一个提示。在写一个新的答案和投入时间之前,有必要检查一下这个问题是否已经被提出和回答了。比如说,我想我最好能很快找到如何把其他问题联系起来。因为这是我几天前关于这个问题的答案。我可以把我自己的问题联系起来。顺便说一句,当你不知道答案或者问题是什么的时候,没有搜索到任何关于这个的信息。。。在任何地方这也是我几天前问这个问题的原因。我总是先搜索。
    public static LocalDate parseDate( final String format, final String s ) {
        return parseDate( format, s, java.util.Locale.getDefault() );
    }

    public static LocalDate parseDate( final String format, final String s, final Locale loc ) {

        final DateTimeFormatter df = DateTimeFormatter.ofPattern( format, loc );
        LocalDate ld;   // Check if this was a legal LocalDate.
        try {
            ld = LocalDate.parse(s, df);
        } catch (java.time.format.DateTimeParseException pe) {
            //System.out.println( pe.getMessage() );
            ld = null;  // This will signal an error
        }
        return ld;
    }