我正在使用json和rest框架将我的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模板中,我可以很容易地做到这一点
{{文章.Date|日期:‘d-m-Y H:i'}}
但在android上我有点困惑
发布于 2018-06-18 06:54:53
我通过更改序列化程序类中的日期格式解决了这个问题
date = serializers.DateTimeField(format="%m/%d/%Y %H:%M", required=False, read_only=True)
发布于 2018-06-18 05:54:05
如果您使用的是接口,您可以使用:
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
可以解析您的日期。
或者,正如提到的,解析为Instance
比解析为ZonedDateTime
更合适:
String newFormat = Instant.parse(dt)
.atZone(ZoneId.of("Pacific/Auckland"))
.format(DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm"));
关于你的错误
你的错误来自Date.parse(dt)
,因为默认的日期模式不能解析你的日期,你需要给它正确的格式,这样它才能理解如何格式化你的日期。例如:
String date = formatter.format(
new SimpleDateFormat("the pattern which match your string date (dt)").format(dt)
);
但在任何情况下,我都不建议使用SimpleDateFormat
或Date
。
项目使用几乎相同的语法向后移植到Java6和7的大部分API功能。在项目中进一步适应了早期的Android (<26)。参见。
https://stackoverflow.com/questions/50900725
复制相似问题