Codenameone 代码名一个日期解析

Codenameone 代码名一个日期解析,codenameone,Codenameone,尝试使用SimpleDataFormat的codenameone库解析ISO8601。我得到下面的错误 String input = "2019-08-30T00:34:34Z"; SimpleDateFormat format = new SimpleDateFormat(DateFormatPatterns.ISO8601); Date date = format.parse(input); java.lang.StringIndexO

尝试使用SimpleDataFormat的codenameone库解析ISO8601。我得到下面的错误

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

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

查看的源代码,
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);
   }
}
获取一个“不可解析日期”错误(但不是您得到的字符串索引错误)

检查显示
Z
代表格式,即
+
-
和4位数字(以小时和分钟为单位从GMT偏移)。将输入中的
Z
更改为这样的时区偏移,例如:

String input = "2019-08-30T00:34:34-0600";
这对我来说很好

也就是说,整个
SimpleDateFormat
等都不受欢迎。您应该切换到新的

tl;博士 似乎与你的问题无关

分析格式符合的字符串。从生成的
即时
,转换为旧类
日期

java.util.Date                                   // A bloody-awful class representing a moment in UTC. Avoid wherever possible. Replaced by `java.time.Instant`. 
.from(                                           // Converting from modern `Instant` to legacy `Date`. 
    Instant.parse( "2019-08-30T00:34:34Z" )      // Parsing an ISO 8601 formatted string into a `java.time.Instant` object. 
)                                                // Returns a `java.util.Date` legacy class object.
提示:调查代码名1是否已更新以支持java.time

java.time 您使用的是几年前被现代java.time类取代的糟糕的日期时间类

您的输入是标准格式,默认情况下,
Instant
类使用它来解析表示UTC中某个时刻的字符串

Instant instant = Instant.parse( "2019-08-30T00:34:34Z" ) ;
避免
java.util.Date
。但是,如果必须使用它与尚未更新为java.time的旧代码进行互操作,则可以转换。从添加到旧类的方法中查找新的
到…
/

java.util.Date d = Date.from( instant ) ; 

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

该项目现已启动,建议迁移到类

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • Java9添加了一些次要功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(这是zulu time的一个bug。我不确定这是怎么发生的,因为这段代码已经存在了很长时间,但它应该可以与今天的更新一起使用。

      请参考,非常麻烦的日期时间类,例如,
      java.text.SimpleDateFormat
      现在被java 8和更高版本中内置的类所取代。请参阅。所有其他这里的回答和这些评论不适用于Codename One,不幸的是,它还没有JSR310引用:com.codename1.l10n.simpleDataFormat;和com.codename1.l10n.DateFormatPatterns;