Не удается преобразовать формат даты по умолчанию в Java - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь преобразовать JSON в Java Object (транзакция) и наоборот. Я продолжаю получать это исключение:

java.text.ParseException: Unparseable date: "Sun Apr 28 02:41:11 IDT 2019"

в этой строке в моем коде ниже:

timeReceived = sdf.parse(json.get("timeReceived").toString());

, хотя я много раз читал описание класса Date и формат I используется должно соответствовать дате получения. Был бы признателен за помощь. спасибо!

Мой код:

    public Transaction convertJsonToTransaction(JSONObject json){
        UUID uuid= UUID.fromString(json.getAsString("uuid"));
        SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss z 
yyyy");
        Date timeReceived= null;
        try {
            timeReceived = sdf.parse(json.get("timeReceived").toString());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        String recipient =json.get("recipient").toString();
        Date timeSent= null;
        try {
            timeSent = sdf.parse(json.get("timeSent").toString());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        String description=json.getAsString("description");
        return new Transaction(uuid, sender, timeReceived, recipient, 
timeSent, description);
    }

    public static void main (String args[]){
        Transaction t = new Transaction(UUID.randomUUID(), "ms1", new 
Date(), "ms2", new Date(), "flow");
        net.minidev.json.JSONObject jo = t.convertTransactionToJson();
        System.out.println(((JSONObject) jo).toString());
        Transaction tr = t.convertJsonToTransaction(jo);
        System.out.println(tr.toString());
    }

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

У вас есть \ n в регулярном выражении.Эта вещь случалась со мной много раз.Просто предложение, когда вы обнаружили этот тип проблемы, перейдите в любой онлайн-инструмент, чтобы проверить специальный или скрытый символ в вашей строке (Некоторое время там будет скрытый символ, вы не сможете найти его своими глазами.).Еще одна вещь. Если вы копируете регулярное выражение или любую строку, используемую в программе, из любого инструмента, из Интернета или из любого документа, прежде чем вставлять его в свой код, проверьте, скопировал ли он какой-либо специальный символ или скрытый символ.Я обычно использую этот инструмент.

enter image description here

Все остальное правильно. Это работает для меня.

enter image description here

0 голосов
/ 28 апреля 2019

У вас действительно небольшая ошибка в формате даты: дополнительный пробел между датой и часом заполнителя EEE MMM d HH:mm:ss z yyyy.Избавьтесь от этого, и это работает EEE MMM d HH:mm:ss z yyyy

...