【问题标题】:How to save current date and time to database using java?如何使用java将当前日期和时间保存到数据库?
【发布时间】:2013-03-04 23:02:04
【问题描述】:

我正在使用以下代码获取当前日期和时间,但输出不是我所期望的,我无法将其保存到数据库中。

输出 >> 当前:Tue Mar 05 09:58:26 EST 2013

预期输出>>当前:2013-03-05 9:58:26

 .....{  
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat parseFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        try {
            System.out.println("current: " +parseFormat.parse(dateFormat.format(date)));
            return parseFormat.parse(dateFormat.format(date));
        } catch (ParseException ex) {
            Logger.getLogger(ConstructionModel.class.getName()).log(Level.SEVERE, null, ex);
        }
        return date;
     }
        ......

        ps.setDate(....) <<< failed

数据库

 name   type
 mydate Date

【问题讨论】:

  • 为什么你使用客户端PC时间而不是数据库服务器时间?使用CURRENT_TIMENOW SQL函数更好,原因有很多,包括所有数据都基于一个,服务器系统时钟。跨度>

标签: java sql jakarta-ee datetime


【解决方案1】:

格式化前不需要解析:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date date = new Date();

String frmtdDate = dateFormat.format(date);

System.out.println("frmtdDate: " + frmtdDate);

但是,如果您尝试将日期放入某些 DB 语句中,则不应以文本形式进行,而应使用利用 java.sql.Datejava.sql.Timestamp 的 JDBC 设置器之一

【讨论】:

  • @Daniel:您需要将其设置为时间戳,以保存日期和时间。看我的回答。
  • @IgorRodriguez,对于我所知道的大多数 JDBC API,它可以作为日期来完成,而不必是时间戳
  • 我将其更改为您的代码并使用了 setTimestamp 但给了我一个错误。
  • @foampile:如果我没有记错的话,我在使用某些内存数据库时遇到了 Date 问题。这就是我现在更喜欢使用时间戳的原因。
【解决方案2】:

您需要使用 sql 时间戳来保存到数据库。将您的 java.util.Date 转换为 java.sql.Timestamp:

ps.setTimestamp(new java.sql.Timestamp(myDate.getTime()));

【讨论】:

  • 这不会保存日期的时间部分。
  • 我做到了,但它给出了错误提示,没有找到适合 setTimestamp(int,Date) 方法 PreparedStatement.setTimestamp(int,Timestamp,Calendar) 的方法不适用的方法 (int,Timestamp) 是不适用....
  • @Daniel:您需要使用您的日期创建一个新的时间戳,如示例所示。
  • @Daniel:有 2 个不同的时间戳。您使用的是 java.sql 包中的那个吗?请注意,您的 IDE 可能已经导入了 java.security.Timestamp,这是一个不同的。
【解决方案3】:

format 接受Date 并返回格式化的Stringparse 采用格式化的 String 并返回 Date 对象。当您执行parseFormat.parse(dateFormat.format(date)) 时,您正在将Date 转换为String 并再次转换为Date。打印的值是Date.toString() 提供的默认表示,而不是格式化字符串。

       System.out.println("current: " +dateFormat.format(date));

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多