代号一个日期解析

Codename One Date parsing

正在尝试使用 SimpleDateFormat 的 codenameone 库解析 ISO8601。我收到以下错误;

String input = "2019-08-30T00:34:34Z";
       SimpleDateFormat format = new 
       SimpleDateFormat(DateFormatPatterns.ISO8601);
       Date date = format.parse(input);     

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-18

查看DateFormatPatterns的源代码,ISO8601定义为"yyyy-MM-dd'T'HH:mm:ssZ"。

将其放入最小的普通旧 Java 示例中:

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

public class DateProblem {
    public static void main(String[] args) throws Exception {
        String input = "2019-08-30T00:34:34Z";
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
            // DateFormatPatterns.ISO8601
        Date date = format.parse(input);     
        System.out.println(date);
   }
}

给我一个 "unparsable date" 错误(但不是你得到的字符串索引错误)。

检查 Javadoc for SimpleDateFormat shows that Z stands for RFC 822 格式,即 +- 和 4 位数字(与 GMT 的小时和分钟偏移)。将输入中的 Z 更改为这样的时区偏移量,例如:

String input = "2019-08-30T00:34:34-0600";

这对我来说解析得很好。

也就是说,整个 SimpleDateFormat 等都已弃用。您应该切换到新的 java.time API

这是祖鲁时间的一个错误。我不确定这是怎么发生的,因为这段代码已经存在很长时间了,但它应该适用于今天的更新。