2015-06-23 3 views
6

У меня есть метка времени в json, которая находится на сервере Linux. Я хотел бы преобразовать его в простой формат времени, используя Java.Как преобразовать временную метку в JSON в нормальную дату и время в java?

мне нужно время и дату в следующем формате: дд-мм-гггг чч: мм: сс

вот мои данные в формате JSON:

[ 
    { 
    "batch_date": 1419038000 
    }, 
    { 
    "batch_date": 1419037000 
    } 
] 
+0

Как вы разбираете Json? Посмотрите на gson или jackson – beresfordt

+1

@pavankumarparasa Пожалуйста, не публикуйте посторонние данные и данные. Минимизируйте свой сценарий до минимума, необходимого для демонстрации вашей проблемы. См. [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). –

ответ

7

Дата партии

"batch_date": 1419038000, 

выглядит как секунды от эпохи,

new Date (batch_date * 1000); 

затем использовать SimpleDateFormat должны сделать трюк

SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 

- код -

long batch_date = 1419038000; 
    Date dt = new Date (batch_date * 1000); 

    SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); 
    System.out.println(sfd.format(dt)); 

- выход -

20-12-2014 10:13:20 
+0

Вы имеете в виду 'HH', а не' hh'. –

+0

исправлено спасибо –

+0

@ScaryWombat мы можем прочитать временную метку? без использования этих DateFormats. Я имею в виду, просто глядя на него, можем ли мы сказать, какой год или месяц или дату он похож. – Prabs

-3

, когда мы хотим, чтобы прочитать/разобрать Строковое значение в качестве даты, мы должны знать формат даты этой входной строки, иначе мы получим ошибку da te значение.

batch_date: 1419038000 Каков формат даты этого значения?

Если мы хотим получить значение даты в требуемом формате, как в вашем случае 'dd-mm-yyyy hh: mm: ss'. существует два возможных пути.

1) request batch_date значение должно быть в вашем требуемом формате. или

2) Если значение batch_date является другим форматом, мы должны знать исходный формат и создать объект Date с исходным форматом с использованием метода SimpleDateFormat parse, а затем преобразовать его в требуемый формат с использованием другого метода формата SimpleDateFormat.

3

Нет Такой тип данных

Там нет такого понятия, как «JSON метки времени». JSON имеет very few defined data types. Среди них нет типов даты и времени.

Как correct Answer по Scary состояний Wombat, номер, по-видимому подсчетом целых секунд с эпохи Unix в 1970. java.util.Date класс отслеживает время как миллисекундах с Unix epoch, а не целых секунд. Поэтому вам нужно умножить на 1000. Вам также необходимо иметь дело с целыми числами long (64-разрядные), а не с int (32-разрядными). Приложите верхний регистр L к числовым литералам и объявите любые переменные как long.

Классы java.util.Date/.Calendar, как известно, хлопотны. Теперь их вытесняют java.time package, встроенные в Java 8 и более поздние версии, и/или стороннюю библиотеку Joda-Time.

Различные библиотеки обработки JSON поддерживают конвертеры для создания объектов java.time или Joda-Time. Или вы можете выполнить преобразование в своем коде, как показано ниже.

Помните, что и java.time, и Joda-Time поддерживают назначение часового пояса. Код ниже присваивает UTC для демонстрационных целей, но вы можете назначить желаемую/ожидаемую зону.

Joda времени

Вот код в Joda-Time 2.8.1, показывающий использование вашего входного числа либо как секундах или миллисекундах.

long secondsSinceEpoch = 1419038000L; 
DateTime dateTimeSeconds = new DateTime(secondsSinceEpoch , DateTimeZone.UTC); 
DateTime dateTimeMillis = new DateTime(secondsSinceEpoch * 1000L , DateTimeZone.UTC); // Note the crucial "L" appended to the numeric literal. 

Дамп для консоли.

System.out.println("dateTimeSeconds: " + dateTimeSeconds); 
System.out.println("dateTimeMillis: " + dateTimeMillis); 

При запуске.

dateTimeSeconds: 1970-01-17T10:10:38.000Z 
dateTimeMillis: 2014-12-20T01:13:20.000Z 

java.time

Аналогичный код выше, но с использованием java.time Явы 8.

Instant instant = Instant.ofEpochSecond(1419038000L); 
ZonedDateTime zdtUtc = ZonedDateTime.ofInstant(instant , ZoneOffset.UTC); 
ZonedDateTime zdtMontréal = zdtUtc.withZoneSameInstant(ZoneId.of("America/Montreal")); 

Dump утешать.

System.out.println("zdtUtc: " + zdtUtc); 
System.out.println("zdtMontréal: " + zdtMontréal); 

При запуске.

zdtUtc: 2014-12-20T01:13:20Z 
zdtMontréal: 2014-12-19T20:13:20-05:00[America/Montreal] 
+0

Я имею в виду ... У меня есть метка в json –

+0

Хорошая информация о комментарии к часовому поясу! Мне было интересно, почему я получаю ** 01 **: 13: 20.000Z, а не ** 10 **: 13:20 (как Scary Wombat) за часть времени! – Didier68