我正在使用json和其余框架将django网站连接到android应用
json数据包含这样的日期时间:
{
date: "2018-06-05T12:42:48.545140Z"
}
当android收到日期时,我尝试使用以下代码对其进行格式化:
String dt="2018-06-05T12:42:48.545140Z";
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm");
String date=formatter.format(Date.parse(dt));
我得到以下错误:
java.lang.IllegalArgumentException:
解析错误:2018-06-14T14:30:02.982009Z
在java.util.Date.parseError(Date.java:367)
在java.util.Date.parse(Date.java:448)
在Django模板中,我可以轻松地做到这一点
{{article.date | date:’d-m-Y H:i’}}
但是在android中我有点困惑
解决方法:
如果您使用的是java.time API,则可以使用:
String dt = "2018-06-05T12:42:48.545140Z";
zoneddatetime zdt = zoneddatetime.parse(dt);
String newFormat = zdt.format(DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm"));
System.out.println(newFormat);//05/06/2018 12:42
注意我不使用任何格式化程序,默认的zoneddatetime可以解析您的日期.
或如@Basil Bourque所述,更适合解析为Instance而不是zoneddatetime:
String newFormat = Instant.parse(dt)
.atZone(ZoneId.of("Pacific/Auckland"))
.format(DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm"));
关于您的错误
您的错误来自Date.parse(dt),因为Date的默认模式无法解析您的日期,您需要为其指定正确的格式,以便它可以了解如何格式化日期.例如 :
String date = formatter.format(
new SimpleDateFormat("the pattern which match your string date (dt)").format(dt)
);
但是无论如何我都不建议使用SimpleDateFormat或Date.
ThreeTen-Backport项目移植到Java 6& java.time的大部分功能都具有几乎相同的API语法.在ThreeTenABP项目中进一步适用于较早的Android(< 26).参见How to use ThreeTenABP.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。