如何在我的实体中以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
答案 0 :(得分:2)
LocalDate.parse( "2017-04-14" )
您使用的是错误的课程。
避免使用Date
,Calendar
和SimpleDateFormat
这样麻烦的旧版本。现在取代java.time类。
LocalDate
LocalDate
类表示没有时间且没有时区的仅限日期的值。
您的输入符合ISO 8601标准。在解析/生成字符串时,java.time类默认使用这些标准格式。因此无需指定格式化模式。
LocalDate ld = LocalDate.parse( "2017-04-14" );
要以相同格式生成字符串,请调用toString
。
String output = ld.toString() ;
不要将字符串与日期时间对象混淆。可以通过解析字符串来创建日期时间对象。日期时间对象可以生成表示其值的字符串。但是字符串和日期时间总是分开且不同。
问题的第一行使用不同的格式。我希望这是一个错误。您应尽可能坚持使用ISO 8601格式,在序列化数据交换时,尤其。
如果您真的想要其他格式,请搜索DateTimeFormatter
。已经在Stack Overflow上多次覆盖。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 1 :(得分:2)
尝试以下代码
进口
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对象
@Column(name = "date")
private Timestamp date;
private String date;
解析输入
if (!StringUtils.isNullOrEmpty(yourObjectTO.getDate())) {
yourObjectModel.setDate(convertStringToTimestamp(yourObjectTO.getDate()));
}
用于转换的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;
}