java - 在 Apache JsonToStringStyle 中格式化日期

标签 java apache apache-commons date

我正在为我的实体实现 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,因为它是私有(private)的。

最佳答案

ZonedDateTime 是新的 Java 8 API 的一部分,而 SimpleDateFormat 是旧的错误日期格式化程序。您需要为 Java 8 日期/时间类使用新的 DateFormatter。

然而,您发布的 JSON 既不是 ZonedDateTime,也不是日期,它是 GregorianCalendar,因此不确定您的问题是否真的与您所说的 ZonedDateTime 有关。

关于java - 在 Apache JsonToStringStyle 中格式化日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53932301/

相关文章:

c# - 是否有等效于 Java 的 ToStringBuilder for C#?一个好的 C# 版本有什么特点?

java - 如何在从java中的 session 中检索 session 数据时验证 session 数据?

apache - https 在多个 docker 容器中

regex - 如何在rewritecond中匹配www和非www?

php - css 样式表中的全局变量

Java boolean CLI 选项

安装后找不到java但java程序运行

java - Aspectj 通过外部库实现功能

java - HQL 不会忽略列中包含空白字符串的值

java - 通过 OLSMultipleLinearRegression 计算估计值