2012-11-27 2 views
4

Я использую Gson для преобразования объекта java.util.Date в Json, а затем преобразование JSON обратно в java.util.Date объекта:Java говорит, что эти 2 Дата объекты не равны

Date date = new Date(); 
    System.out.println("date=" + date + "; date.getTime()=" + date.getTime()); 
    String json = gson.toJson(date); 
    System.out.println("date in json format=" + json); 
    Date newDate = gson.fromJson(json, Date.class); 
    System.out.println("newDate=" + newDate + "; gettime=" + date.getTime()); 
    if (!newDate.equals(date)) { 
     System.out.println("dates are not the same - bad"); 
    } 
    else 
     System.out.println("dates are the same - good"); 

2 Дата объекты должны быть равны, но, как вы можете видеть на выходе, они не являются:

date=Fri Nov 23 12:18:21 EST 2012; date.getTime()=1353691101023 
date in json format="Nov 23, 2012 12:18:21 PM" 
newDate=Fri Nov 23 12:18:21 EST 2012; gettime=1353691101023 
dates are not the same - bad 

Как Дата объекты могут быть разными, когда Javadoc для Date.equals() метод говорит, «две даты объекты равны тогда и только тогда, когда метод getTime возвращает такое же длинное значение для обоих? Как видно из вывода, оба объекта Date возвращают одинаковое значение для getTime().

ответ

10

Третий println() печатает getTime() неправильного объекта:

System.out.println("newDate=" + newDate + "; gettime=" + date.getTime()); 
                 ^^^^ should be newDate 

Я подозреваю, что как только вы распечатать newDate.getTime(), вы обнаружите, что она отличается от date.getTime().

+0

Спасибо, плохая ошибка с моей стороны. Вы правы, newDate.getTime() отличается, поскольку Json не хранит миллисекунды. – pacoverflow

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