Java实体 - 存储日期

时间:2017-04-14 15:06:25

标签: java date jpa

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

但我必须从字符串中解析它。

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

2 个答案:

答案 0 :(得分:2)

TL;博士

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

使用java.time

您使用的是错误的课程。

避免使用DateCalendarSimpleDateFormat这样麻烦的旧版本。现在取代java.time类。

LocalDate

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

ISO 8601

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

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

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

String output = ld.toString() ;

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

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

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

关于java.time

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

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

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

答案 1 :(得分:2)

尝试以下代码

  1. 进口

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

    @Column(name = "date")
    private Timestamp date;
    
    private String date;
    
  3. 解析输入

    if (!StringUtils.isNullOrEmpty(yourObjectTO.getDate())) {
        yourObjectModel.setDate(convertStringToTimestamp(yourObjectTO.getDate()));
    }
    
  4. 用于转换的util方法

    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;
    }