java-来自Django的android格式datetime

我正在使用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.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...