Разыгрывание Unix-времени на java на Android

Добрый день. Я работаю над небольшим приложением, и в настоящее время я пытаюсь разобрать время Unix с объекта JSON (на CouchDB). Я попробовал несколько способов, но я думаю, что это самое близкое. Теперь я получаю NumberFormatException: Недопустимый длинный: ошибка "Время"

private Points parseJsonDocument(JSONObject json) throws JSONException, ParseException
{

    String openKey = JSON_MAP.get(MAP_OPEN);
    String closeKey = JSON_MAP.get(MAP_CLOSE);
    String highKey = JSON_MAP.get(MAP_HIGH);
    String lowKey = JSON_MAP.get(MAP_LOW);
    String volumeKey = JSON_MAP.get(MAP_VOLUME);
    String dateKey = JSON_MAP.get(MAP_DATE);


    JSONObject object = json.getJSONObject("Stock");
    JSONArray array = object.getJSONArray("Data");
//  JSONArray array = json.getJSONArray("Data");
    Points result = new Points();


    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //desired format

    Long time = Long.parseLong(dateKey);
    final Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(time *1000);



    for(int i=0;i<array.length();i++)
    {
        JSONObject obj = array.getJSONObject(i);

        Point cp = new Point();
        cp.c = obj.getDouble(closeKey);
        cp.h = obj.getDouble(highKey);
        cp.l = obj.getDouble(lowKey);
        cp.o = obj.getDouble(openKey);
        cp.v = obj.getDouble(volumeKey);

        String date = obj.getString(dateKey);
        cp.dt = df.parse(df.format(cal.getTime()));

        result.add(cp);
    }

    return result;
}

и объект JSON выглядит следующим образом:

     {
   "_id": "abbv",
   "_rev": "12-3d250de8395a12e0c92dfb9d7d379fc4",
    "Stock": {
       "Data": [
       {
           "Time": "1386598949000",
           "Open": "50.17",
           "High": "0",
           "Low": "0",
           "Close": "51.37",
           "Volume": "7285755"
       }
]
}

Это, наверное, какая-то глупая ошибка, которую я просто не вижу из-за отсутствия опыта, поэтому любые советы или рекомендации будут оценены. И да, я пробовал читать javadocs, но я не мог найти решение. Спасибо.

Ответ 1

строка Long time = Long.parseLong(dateKey);

пытается проанализировать String Время как Long. <Удаp > Я думаю, что вы хотите сделать это

String timeString = array.getJSONObject(0).getString(dateKey);
Long time = Long.parseLong(timeString)

Забастовкa >

EDIT: перечитайте свой код, я думаю, проблема в том, что вы пытаетесь разобрать дату слишком рано.

вам нужно переместить строку Long time = Long.parseLong(dateKey); вниз в ваш синтаксический разбор JSON.

то вместо Long time = Long.parseLong(dateKey); вы должны проанализировать дату значение в отличие от даты , поэтому Long.parseLong(date);

Ответ 2

Вы можете создать новый объект Date или новый объект DateTime (из JodaTime - рекомендуемый способ манипулирования датами в Java) с конструктором, который занимает длительное время /Unix в миллисекундах:

long time;
// ...
Date date = new Date(time);
DateTime jodaDate = new DateTime(time);

Взглянув на свой код, вы можете полностью удалить свой синтаксический код. Удалите следующие строки:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //desired format

Long time = Long.parseLong(dateKey);
final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(time *1000);

И замените их внутри вашего цикла для разбора объекта JSON Data:

String date = obj.getString(dateKey);
cp.dt = new Date(Long.parseLong(date));

result.add(cp);

"Желаемый формат" - это формат вывода. Вы можете форматировать строку вывода даты таким образом:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //desired format
String formattedDate = df.format(date);