SimpleDateFormat解析[重复项]有什么问题

问题描述 投票:0回答:1
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)

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

java
1个回答
1
投票

dd MMM yyyy不适用于所有语言环境。在美国,是的。在加拿大,不……不是加拿大的合法解析格式。如果您正在使用新的时间库替换过时的java.util.Date类,则可以通过将Locale.Root作为第二个参数传递给format调用来转义Locale。

编辑:在加拿大,我必须从银行pdf格式格式化dd MMM yyyy,我必须保留默认的Locale来使用它,并使用了它。当然,Java 8时间。多态是这样的,所以我的其他日期调用都可以工作,而不必通过语言环境。我可以通过其他方法Locale.ROOT来获得难以捉摸的“ dd MMM yyyy”格式。

    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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.