2013-04-02 1 views
0

My Web Service возвращает даты вКак конвертировать/Дата (-6847824600000 + 0530)/к времени Дата

"dateRequired": "/Date(1357101103000+0530)/", 
"etaExport": "/Date(-6847824600000+0530)/", 
"etaImport": "/Date(-6847824600000+0530)/", 

как JSON. Я хочу знать, как наилучшим образом конвертировать эти даты unix в формат DD-MM-YYYY HH: MM и вы хотите исключить '/ Date' и '/'. Каким будет лучший и эффективный способ?

+0

Но что означают эти значения стриба. Каковы их соответствующие даты? – Raedwald

ответ

5

Эти цифры выглядят как миллисекунд с The Epoch затем индикатор часового пояса, который очень странно, потому что обычно, если вы делаете миллисекунды (или секунд), так как Epoch, вы выражающая дату/время в УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ. Итак, первое, что вам нужно сделать, это посмотреть документацию для веб-службы и узнать, что они означают по номерам.

Тогда это вопрос с помощью регулярного выражения (или просто String#substring) для извлечения цифр, Long.parseLong, чтобы превратить их в длинном, инстанцировании Date объекта (например, new Date(longNumber)), и обработке любого часовой пояс математики это веб служба ожидает, что вы это сделаете. Для этого последнего бита в JDK вам понадобится Calendar, или если вам нужно что-то более легкое в работе и более мощное, многим нравится JodaTime.

+0

Мой веб-сервис, написанный в WCF и um, возвращающий объект C# DatetTime. Я думаю, что они миллисекунды. – Kalanamith

+1

@ Каланамит: Да, эта часть была ясна. Что непонятно, так это время. Опять же, обычно значения Эпоха (любого вида) являются инвариантными, выраженными в UTC. Возможно, цель состоит в том, чтобы сказать, что время должно быть выражено в +0530 - например, что ваше фактическое первое значение '1357101103000' - 02 января 2013 04:31:43 UTC, но вы должны показать это как 02 января 2013 г. 10:01 : 43 +0530, или что-то в этом роде. –

+1

Ну, я не намеренно добавлял часовой пояс. Это происходит автоматически. Значение моего Datetime в базе данных выглядит так: «2012-10-31 20: 48: 47.287» и чтение и сериализация. – Kalanamith

1

Привет Хотя выше ответ является правильным, но в качестве альтернативы к этому вы можете использовать метод ниже

первого экстракт длинного DATETIME с использованием JSON метода ниже.

 String JsonDate = jsonGroup.getString("Date"); 

     int idx1 = JsonDate.indexOf("("); 
     int idx2 = JsonDate.indexOf("+"); 

     if (idx1 > 0 && idx1 < idx2 && idx2 < JsonDate.length()) { 
      String s = JsonDate.substring(idx1 + 1, idx2); 
     } 

После того как вы дату вы можете конвертировать Долго Дата

if (!s.equalsIgnoreCase("null")) { 
     Long date1 = Long.parseLong(s); 
     Date dt1 = new Date(date1); 

     holder.TxtPunchoutDate.setText(getDateCurrentTimeZone(dt1)); 
    } 

и множество От даты в формате UTC и затем преобразовать его обратно к местному времени, как показано ниже

public static String getDateCurrentTimeZone(Date dt) { 
    try { 
     //Convert DATE to UTC DATETIME 
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
       "MMM dd yyyy hh:mm:ss aa "); 
     simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
     //simpleDateFormat.setTimeZone(TimeZone.getDefault()); 
     //Convert to LocalDATE from UTC 
     Date fromGmt = new Date(dt.getTime() + TimeZone.getDefault().getOffset(dt.getTime())); 

        return new SimpleDateFormat("MMM dd yyyy hh:mm:ss aa").format(fromGmt).toString(); 

    } catch (Exception e) { 
    } 
    return ""; 
} 

Как было сказано ранее, это альтернатива, а не правильный способ сделать это. Хотя, если кто-то захочет реорганизовать это, пожалуйста, вы всегда рады.

Thanks

Смежные вопросы