Android API级别23中的ISO 8601问题

时间:2019-04-03 04:56:06

标签: java android

我已经针对ISO 8601使用Java格式的问题,我正在使用此代码

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
//yyyy-MM-dd'T'HH:mm:ss.shh:mm
Date date = Calendar.getInstance().getTime();
String cDate = format.format(date);
Log.d("Date","Date is " + cDate);

我的结果是:

Date is 2019-04-03T04:37:52+0000

如果我使用的是yyyy-MM-dd'T'HH:mm:ssZ格式。结果是:

Date is 2019-04-03T04:49:33.3304:49

如果我使用的是yyyy-MM-dd'T'HH:mm:ss.shh:mm格式。我已经尝试过解决方案,但是没有给我想要的解决方案。 我想要的解决方案是2008-09-15T15:53:00+05:00。我尝试使用Offset,但不适用于API级别23,仅适用于API级别28。

2 个答案:

答案 0 :(得分:1)

这是您应该使用的格式掩码:

yyyy-MM-dd'T'HH:mm:ssXXX

SimpleDateFormat的{​​{3}}中,我们可以看到X代表ISO 8601时区,该时区以从格林尼治标准时间偏移的小时数表示。

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
format.setTimeZone(TimeZone.getTimeZone("Africa/Cairo"));
Date date = Calendar.getInstance().getTime();
String cDate = format.format(date);
System.out.println("Date is " + cDate);

Date is 2019-04-03T06:41:30+02:00

请注意,我需要分配一个GMT以外的时区,因为GMT只会返回该时区的Z

答案 1 :(得分:1)

Tim是正确的,但是他给定的模式适用于Java,不适用于android中的java。 对于Android Java,请使用此模式

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ");

然后将输出

Date is 2019-04-03T08:29:27+00:00