【问题标题】:Jax-RS JsonFormat Date Unknown 39 [duplicate]Jax-RS JsonFormat 日期未知 39 [重复]
【发布时间】:2017-12-29 10:43:01
【问题描述】:

FilmEvent.java

    import java.util.Date;

    @AllArgsConstructor(access=AccessLevel.PUBLIC)
    public class FilmEvent {
    @Getter
    private String id;

    @Getter
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd,HH:mm", timezone="CET")
    private Date date;

    @Getter
    private String[] attributes;

    @Getter
    private boolean soldOut;

}

我的记录

FilmEvent event = new FilmEvent("334",  new Date(2018,1,1,12,44), null, false);

我在 Firefox 中的结果

date:"3918-02-01,12:44"

问题是,为什么是 3918-02-01?以及如何解决它;

【问题讨论】:

  • 欢迎来到 StackOverflow。请通过Tour 了解如何编辑您的问题,使其信息更丰富、更清晰,以便其他用户能够回答。详情请见:Why is “Can someone help me?” not an actual question?.
  • 您正在使用已弃用已久的 Date 构造函数。最好完全避免使用DateThe modern Java date and time API known as java.time (or JSR 310) 使用起来更好。
  • 每当我需要一个具有特定值的老式Date 对象时,我都会使用Date.from(ZonedDateTime.of(2018, 1, 1, 12, 44, 0, 0, ZoneId.of("Europe/Berlin")).toInstant())。它更长,但读起来更清晰,不容易出错,并且更准确地说明了我想要和得到的东西。

标签: java rest maven date jax-rs


【解决方案1】:

根据JavaDoc 这个Date 构造函数将年份参数作为year-1900,因此您的初始年份将被1900 添加。

JavaDoc:

year - the year minus 1900.
month - the month between 0-11.
date - the day of the month between 1-31.
hrs - the hours between 0-23.
min - the minutes between 0-59.

这也是很久以前弃用的。我建议使用here中的LocalDateTime

【讨论】:

  • 似乎很好,但它会导致日期:{ year:2018 month:"JANUARY" monthValue:1 dayOfMonth:1 hour:12 minute:44 second:0 nano:0 dayOfWeek:"MONDAY" dayOfYear:1 chronology:{…}} 我只需要年、月、日、小时、分钟任何提示吗?
  • @Sumek 您选择了哪种方法。可能你需要LocalDateTime.of。我打赌你可以从这里的源代码中找到适合你的:docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html
  • 我考虑的是输出而不是方法。我已经这样做了,谢谢你的帮助。链接到未来的输出问题。 stackoverflow.com/questions/26804941/…
【解决方案2】:

日期(整数年,整数月,整数日期,整数小时,整数分钟)已弃用。作为 JDK 1.1 版本的,由 Calendar.set(year + 1900, month, date, hrs, min) 或 GregorianCalendar(year + 1900, month, date, hrs, min)。

然后你可以使用:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2018);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.MINUTE, 12);
cal.set(Calendar.SECOND, 44);
Date date = cal.getTime();

Calendar cal = Calendar.getInstance();
cal.set(2018,1,1,12,44);
Date date = cal.getTime();

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2016-04-21
    相关资源
    最近更新 更多