在lombok漂亮的印刷日历

时间:2017-03-22 11:52:11

标签: java lombok

我使用lombok它真的很棒! 但是,如果我打印包含Calendar属性的bean,它会打印Calendar对象(当然......),看到Calendar的值真的很混乱。我可以看到像

这样的东西
ScheduledEvent(id=1, scheduledStartDate=java.util.GregorianCalendar[time=1492032183000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Budapest",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=151,lastRule=java.util.SimpleTimeZone[id=Europe/Budapest,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=3,WEEK_OF_YEAR=15,WEEK_OF_MONTH=3,DAY_OF_MONTH=12,DAY_OF_YEAR=102,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=11,HOUR_OF_DAY=23,MINUTE=23,SECOND=3,MILLISECOND=0,ZONE_OFFSET=3600000,DST_OFFSET=3600000], ...

是否可以以某种方式将SimpleDateFormat分配给Calendar(例如,如果lombok遇到Calendar对象然后使用此格式化程序)并且具有类似'2016-34-34T12:12:12.543'的简单值?

谢谢,

2 个答案:

答案 0 :(得分:2)

这不是lombok特有的,而是toString()的{​​{1}}实现。

如果您想对此采取任何措施,您可以选择以下几种方法:

  • 使用GregorianCalendar或任何新的Time API类,它们也有更漂亮的LocalDateTime输出
  • wrap toString() - 您自己的对象中的实例,并自己实现该包装类的GregorianCalendar
  • 不要让lombok为toString()生成toString(),而是提供您自己的实现
  • 修改lombok以按照您喜欢的方式处理ScheduledEvent

答案 1 :(得分:1)

我知道这是两年前的帖子,但是现在有了更好的解决方法。

让龙目岛生成 toString()方法,用 @ ToString.Exclude 注释您的字段,并创建带有以下注释的方法: @ ToString.Include(名称=“ yourVariable”)

这里是一个例子:

@Data
public class ScheduledEvent {
    private int id;

    @ToString.Exclude
    private GregorianCalendar scheduledStartDate;
    // etc ...

    @ToString.Include(name = "scheduledStartDate")
    private String formatScheduledStartDate() {
        return new SimpleDateFormat("yyyy-MM-dd").format(scheduledStartDate.getTime());
    }
}

在这种情况下, toString()方法返回:

ScheduledEvent(id=1, scheduledStartDate=2019-03-04)
相关问题