漂亮的龙目岛印刷日历
pretty printing Calendar in 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 分配给日历(例如,如果 lombok 遇到日历对象然后使用此格式化程序)并具有像“2016-34-34T12:12:12.543”这样的简单值?
谢谢,
五、
这不是 lombok 特有的,而是 GregorianCalendar
的 toString()
实现。
如果您想对此采取任何措施,您有多种选择:
- 使用
LocalDateTime
或任何新的时间 API classes 也有更漂亮的 toString()
输出
- 在您自己的对象中包装
GregorianCalendar
-实例,并自己实施 toString()
包装器 class
- 不要让 lombok 为
ScheduledEvent
生成 toString()
,而是提供您自己的实现
- 修改 lombok 以
GregorianCalendar
您喜欢的方式
我知道这个 post 是两年前的事了,但现在有更好的解决方案了。
让 lombok 生成 toString() 方法,用 @ToString.Exclude 注释你的字段并用这个创建一个方法注释:@ToString.Include(name = "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() 方法 returns 在这种情况下:
ScheduledEvent(id=1, scheduledStartDate=2019-03-04)
我用的是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 分配给日历(例如,如果 lombok 遇到日历对象然后使用此格式化程序)并具有像“2016-34-34T12:12:12.543”这样的简单值?
谢谢,
五、
这不是 lombok 特有的,而是 GregorianCalendar
的 toString()
实现。
如果您想对此采取任何措施,您有多种选择:
- 使用
LocalDateTime
或任何新的时间 API classes 也有更漂亮的toString()
输出 - 在您自己的对象中包装
GregorianCalendar
-实例,并自己实施toString()
包装器 class - 不要让 lombok 为
ScheduledEvent
生成toString()
,而是提供您自己的实现 - 修改 lombok 以
GregorianCalendar
您喜欢的方式
我知道这个 post 是两年前的事了,但现在有更好的解决方案了。
让 lombok 生成 toString() 方法,用 @ToString.Exclude 注释你的字段并用这个创建一个方法注释:@ToString.Include(name = "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() 方法 returns 在这种情况下:
ScheduledEvent(id=1, scheduledStartDate=2019-03-04)