【发布时间】:2018-03-27 15:33:34
【问题描述】:
我在数据库中有时间戳格式,我的 setEventDate 方法需要日期格式。 所以在我的 DAO 类中有这样的东西:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Timestamp dbDate = rows.getTimestamp("event_date");
String dbDateToString = new SimpleDateFormat("HH:mm").format(dbDate);
Date dbDateToDate = sdf.parse(dbDateToString);
e.setEventDate(dbDateToDate);
System.out.println(dbDateToString);
System.out.println(dbDateToDate);
我从数据库获取时间戳,将其格式化为字符串,下一步我将其解析为日期。我知道这听起来很奇怪。结果是: 字符串 - 17:08 日期 - 1970 年 1 月 1 日星期四 17:08:00 CET
我不明白:/ 我需要那种“HH:mm”格式。
【问题讨论】:
-
您使用的日期字符串是什么?如果不指定月份和年份,则默认为 1970 年 1 月 1 日。
-
时间戳在数据库中没有格式,
java.util.Date也没有格式。你的假设毫无意义。您的问题来自将时间戳转换为小时:分钟字符串,然后将其解析回日期(在没有日期信息的情况下将默认为 1970 年 1 月 1 日),然后使用其默认的toString打印...如果你想要 HH:mm,那么你需要将它存储在一个字符串中,并且在生成dbDateToString之后你就已经准备好了。 -
@Mark Rotteveel 所以有 HH:mm 格式的 String dbDateToString。在我的 POJO 类中有私有 Date eventDate;我不能像这样使用那个字符串 dbDateToString: smth.setEventDate(dbDateToString);因为我的方法需要日期格式。
-
您可以考虑改用java.time.LocalTime。
-
您唯一需要做的事情(如answer by Arthur 所示就是做
new Date(dbDate.getTime)。演示文稿(格式为HH:mm)是以后的问题。如果你真的只需要时间,然后 1)SQLTimestamp是错误的类型(您应该使用 SQLTime),2)按照 Gord 的建议,您最好使用LocalTime。