Zul*_*ain -3 java android iso8601
基本上我的日期字符串是ISO-8601日期字符串,所以我搜索了将ISO-8601日期字符串转换为日期,但解决方案很冗长.这是详细信息.
我有一个字符串2018-02-02T06:54:57.744Z想要将其转换为日期,但我收到错误:
java.text.ParseException: Unparseable date: "2018-02-02T06:54:57.744Z"
Run Code Online (Sandbox Code Playgroud)
我使用以下技术来做到这一点,但没有成功:
SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
parser.setTimeZone(TimeZone.getTimeZone("UTC"));
Date parsed = parser.parse(utcDateString);
return parsed;
Run Code Online (Sandbox Code Playgroud)
我也使用以下模式SimpleDateFormat但没有成功:
yyyy-MM-dd'T'HH:mm:ss.SSSZ
yyyy-MM-dd HH:mm:ss.S
yyyy-MM-dd'T'HH:mm:ssX
yyyy-MM-dd'T'HH:mm'Z'
Run Code Online (Sandbox Code Playgroud)
任何解决这个问题的方法.
Z是时区.您必须在日期字符串的末尾添加时区,或者只是从格式中删除它:yyyy-MM-dd'T'HH:mm:ss
带有时区的正确日期字符串是这样的: 2018-02-02T06:54:57.744+0200
Instant.parse( “2018-02-02T06:54:57.744Z” )
Run Code Online (Sandbox Code Playgroud)
现代方法使用 java.time 类。
Instant是 的替代品java.util.Date,代表 UTC 时间线上的一个时刻。
您的输入字符串恰好符合 ISO 8601 标准。java.time 类在解析/生成字符串时默认使用标准格式。所以不需要指定格式模式。
Instant instant = Instant.parse( “2018-02-02T06:54:57.744Z” ) ;
Run Code Online (Sandbox Code Playgroud)
最好java.util.Date完全避免麻烦的课程。但是,如果您坚持,请使用添加到旧类中的新方法进行转换。
Date d = Date.from( instant ) ;
Run Code Online (Sandbox Code Playgroud)
对于早期的 Android,请参阅ThreeTen- Backport和ThreeTenABP项目。
该java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310。
从哪里获得 java.time 类?
尝试这个
SimpleDateFormat input = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
SimpleDateFormat output = new SimpleDateFormat("dd/MM/yyyy");
Date d = null;
try
{
d = input.parse("2018-02-02T06:54:57.744Z");
}
catch (ParseException e)
{
e.printStackTrace();
}
String formatted = output.format(d);
Log.i("DATE", "" + formatted);
Run Code Online (Sandbox Code Playgroud)
输出值
| 归档时间: |
|
| 查看次数: |
19180 次 |
| 最近记录: |