【问题标题】:How can I get expected Date format in my DAO class如何在我的 DAO 类中获得预期的日期格式
【发布时间】: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)SQL Timestamp 是错误的类型(您应该使用 SQL Time),2)按照 Gord 的建议,您最好使用 LocalTime

标签: java jdbc


【解决方案1】:

您正在从数据库中获取时间戳,您需要更改它 Datefirst

Timestamp dbDate = rows.getTimestamp("event_date");
Date d = new Date(dbDate.getTime();  

现在您可以进行SimpleDateFormat 格式化工作

Timestamp dbDate = rows.getTimestamp("event_date");
Date d = new Date(dbDate.getTime());  
String dbDateOnlyHourAndMinutes = new SimpleDateFormat("HH:mm").format(dbDate);

那里只有“日期”的小时和分钟。

【讨论】:

  • 您对new Date(dbDate.getTime() + (dbDate.getNanos() / 1000000)) 的使用不正确。 Timestamp.getTime() 已经添加了属于 getNanos() 的毫秒数。具体来说是long time = super.getTime(); return (time + (nanos / 1000000));
  • @MarkRotteveel 感谢男士的更正,我已经更新了我的答案。
【解决方案2】:

您说您想解析日期,但在您的日期格式中,您只传递了小时 (HH) 和分钟 (mm) 格式。 检查如何从以下位置创建所需的日期格式:

What are the date formats available in SimpleDateFormat class?

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

日期格式的示例是:dd/MM/yyyy。

如果我没有正确理解,请解释更多。 这是将时间戳转换为您的格式的示例代码。 假设:所需的日期格式为 MM:yyyy:

    Timestamp stamp = new Timestamp(System.currentTimeMillis());//your timestamp goes here
    Date date = new Date(stamp.getTime());
    System.out.println(date);//result = Tue Mar 27 18:50:09 EEST 2018
    SimpleDateFormat sdf = new SimpleDateFormat("MM:yyyy");
    System.out.println(sdf.format(date)); //result = 03:2018

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2011-10-26
    • 2021-02-25
    相关资源
    最近更新 更多