Codenameone 代码名一个日期解析
尝试使用SimpleDataFormat的codenameone库解析ISO8601。我得到下面的错误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
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;