Форматирование даты в Apache JsonToStringStyle - PullRequest
0 голосов
/ 26 декабря 2018

Я реализую методы toString для моих сущностей.Есть много полей типа ZonedDateTime.К сожалению, он преобразуется в очень длинное текстовое представление:

java.util.GregorianCalendar[
  time=1545826815293,
  areFieldsSet=true,
  areAllFieldsSet=true,
  lenient=true,
  zone=sun.util.calendar.ZoneInfo
  [
    id=
    "UTC",
    offset=0,
    dstSavings=0,
    useDaylight=false,
    transitions=0,
    lastRule=null
  ],
  firstDayOfWeek=1,
  minimalDaysInFirstWeek=1,
  ERA=1,
  YEAR=2018,
  MONTH=11,
  WEEK_OF_YEAR=52,
  WEEK_OF_MONTH=5,
  DAY_OF_MONTH=26,
  DAY_OF_YEAR=360,
  DAY_OF_WEEK=4,
  DAY_OF_WEEK_IN_MONTH=4,
  AM_PM=1,
  HOUR=0,
  HOUR_OF_DAY=12,
  MINUTE=20,
  SECOND=15,
  MILLISECOND=293,
  ZONE_OFFSET=0,
  DST_OFFSET=0
]

Как я могу отформатировать его с помощью SimpleDateFormat?Я попробовал приведенный здесь пример: https://howtodoinjava.com/apache-commons/how-to-override-tostring-effectively-with-tostringbuilder/

public class CustomToStringStyle extends ToStringStyle
{
    private static final long serialVersionUID = 1L;
    protected void appendDetail(StringBuffer buffer, String fieldName, Object value)
    {
         if (value instanceof Date)
         {
             value = new SimpleDateFormat("yyyy-MM-dd").format(value);
         }
         buffer.append(value);
     }
}

Но в этом случае я не использую стиль форматирования JSON.Я не могу расширить JsonToStringStyle, потому что он закрытый.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

GregorianCalendar не является Date, вы можете преобразовать его в Date, а затем использовать код в вашей ссылке:

if (value instanceof calendar)
{
    Date date = new Date(value.getTimeInMillis());
    value = new SimpleDateFormat("yyyy-MM-dd").format(date);
}

Я бы предложил использовать java.time пакет для работы с датой и временем.

0 голосов
/ 26 декабря 2018

ZonedDateTime является частью нового API Java 8, в то время как SimpleDateFormat является старым ошибочным форматером даты.Вам нужно использовать новый DateFormatter для классов даты / времени Java 8.

Тем не менее, JSON, который вы опубликовали, не является ни ZonedDateTime, ни Date, это GregorianCalendar, поэтому не уверен, действительно ли ваша проблема решаетсяс ZonedDateTime, как вы говорите.

...