关于Java实体:Java实体 – 存储日期

Java Entity - storing dates

如何在我的实体中以此格式14-04-2017存储日期?

但是我必须从String中解析它。

1
2
3
4
5
6
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
    today = dateFormat.parse("2017-04-14");
} catch (ParseException e) {
    //catch exception
}

我得到:Fri Apr 14 00:00:00 CEST 2017


试试下面的代码

  • 进口

    1
    2
    3
    4
    5
    import com.mysql.jdbc.StringUtils;
    import java.sql.Timestamp;    
    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    import java.time.format.DateTimeFormatterBuilder;
  • yourObjectModel和yourObjectTO对象

    1
    2
    3
    4
    @Column(name ="date")
    private Timestamp date;

    private String date;
  • 解析输入

    1
    2
    3
    if (!StringUtils.isNullOrEmpty(yourObjectTO.getDate())) {
        yourObjectModel.setDate(convertStringToTimestamp(yourObjectTO.getDate()));
    }
  • util方法进行转换

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public static Timestamp convertStringToTimestamp(String strDate) {      
        String format ="dd/MM/yyyy";
        if(strDate.contains("-")) {
            format ="yyyy-MM-dd";
        }
        DateTimeFormatter DATE_TME_FORMATTER =  
            new DateTimeFormatterBuilder().appendPattern(format)
            .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
            .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
            .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
            .toFormatter();
        LocalDate dt = LocalDate.parse(strDate.substring(0, 10), DATE_TME_FORMATTER);
        Timestamp timestamp = Timestamp.valueOf(dt.atStartOfDay());
        return timestamp;
    }

  • TL;博士

    1
    LocalDate.parse("2017-04-14" )

    使用java.time

    您使用的是错误的类。

    避免麻烦的旧遗留类,如DateCalendarSimpleDateFormat。现在取代了java.time类。

    LocalDate

    LocalDate类表示没有时间且没有时区的仅日期值。

    ISO 8601

    您的输入符合ISO 8601标准。在解析/生成字符串时,java.time类默认使用这些标准格式。因此无需指定格式化模式。

    1
    LocalDate ld = LocalDate.parse("2017-04-14" );

    要以相同格式生成字符串,请调用toString

    1
    String output = ld.toString() ;

    不要将字符串与日期时间对象混淆。可以通过解析字符串来创建日期时间对象。日期时间对象可以生成表示其值的字符串。但是字符串和日期时间总是分开且不同的。

    问题的第一行使用不同的格式。我希望这是一个错误。您应尽可能坚持使用ISO 8601格式,尤其是在序列化数据交换时。

    如果您真的想要其他格式,请搜索DateTimeFormatter。已经在Stack Overflow上多次覆盖。

    关于java.time

    java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧遗留日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

    现在处于维护模式的Joda-Time项目建议迁移到java.time类。

    要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。

    从哪里获取java.time类?

    • Java SE 8,Java SE 9及更高版本

      • 内置。
      • 带有捆绑实现的标准Java API的一部分。
      • Java 9增加了一些小功能和修复。
    • Java SE 6和Java SE 7

      • 许多java.time功能都被反向移植到Java 6& 7在ThreeTen-Backport。
    • Android的

      • ThreeTenABP项目特别适用于Android的ThreeTen-Backport(如上所述)。
      • 请参见如何使用ThreeTenABP ....

    ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的类,例如IntervalYearWeekYearQuarter等。