2015-04-15 5 views
1

Я пытаюсь преобразовать дату в миллисекундах к следующему ISO 8601:Форматирование ISO 8601 Дата с разделителя двоеточие

enter image description here

Но я получаю следующее с помощью SimpleDateFormat:

/** 
    * It converts the time from long to the ISO format 
    * 
    * @param timestampMillis 
    * @return isoDate 
    */ 
    public String convertTimeMillisToISO8601(String timestampMillis) 
    { 
     long timeInLong= Long.parseLong(timestampMillis); 
     DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
     df.setTimeZone(TimeZone.getTimeZone("UTC")); 
     String isoDate = df.format(new java.util.Date(timeInLong)); 
     return isoDate; 
    } 

ВЫВОД:

"ts":"2015-06-18T09:56:21+0000" 

Я знаю, что могу использовать подстроку, чтобы добавить дополнительный двоеточие, но есть ли лучший способ сделать это?

+1

Пробовали ли вы 'x' для часового пояса? –

+0

на основе этого вопроса и ответа. Я думаю, что это не поддерживается в Java 'SimpleDateFormat' http://stackoverflow.com/questions/2201925/converting-iso-8601-compliant-string-to-java-util-date – Yazan

+0

@Tichodroma - да, все распечатывается для UTC, он будет печатать Z. –

ответ

2

Для Java 7 и выше вы можете использовать XXX (часовой пояс ISO 8601) в формате даты String. Согласно документации the documentation, результат X может быть:

X => -08 
XX => -0800 
XXX => -08:00 

, но и для всех тех, она также может вернуть Z!

Для Java 6 и выше, нет X (J6 doc), и так как результат X может или не может делать то, что вы хотите, я настоятельно рекомендую вам просто вставить, что толстой кишки себя.

+2

'X' будет производить' Z' для UTC, а не '+00: 00'. – Bram

+0

Да, это так говорит в документации, которая мне понравилась. Он может генерировать желаемый результат или 'Z'. Вот почему я бы просто вставлял толстую кишку. – Siguza

0

Можете ли вы использовать Java 8?

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ssXXX"); 
System.out.println(formatter.format(ZonedDateTime.now())); 

2015-04-15T17: 24: 19 + 09: 00

+0

Также для UTC? Вот где XXX пошло не так для 'SimpleDateFormat'. – Bram

+2

Для UTC он напечатает 'Z' – Raniz

+0

@Raniz - да, я говорю о UTC. –