SQL日期和时间与Java日期和时间的区别是什么?应该使用哪一个?

3

我需要更新一个记录的日期和时间,但是我不确定是使用SQL Server 2005的CURRENT_TIMESTAMP还是JAVA的日期对象,在这两种情况下都会给出相同的结果。

例如:

select CURRENT_TIMESTAMP

这将输出 2012-08-27 14:30:17.193

而下面的 Java 代码也会明显地执行相同的操作,但它们有什么区别呢。

           Date dNow = new Date( );
           SimpleDateFormat ft = 
           new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS ");

           System.out.println("Current Date: " + ft.format(dNow));

更新:

我有两个prepareStatement,其中一个使用了CURRENT_TIMESTAMP,而另一个使用了JAVA的日期对象(日期对象可以是util.Date或sql.Date)。

语句1:

  pst = con.prepareStatement("insert into sLog(logUser, logType, logSystem, logTime)
             values(?, ?, ?, CURRENT_TIMESTAMP)");
                    pst.setString(1, logUser);
                    pst.setString(2, logType);
                    pst.setString(3, logSystem);
                    pst.executeUpdate();

statement2

pst = con.prepareStatement("insert into sLog(logUser, logType, logSystem, logTime)
             values(?, ?, ?, ?)");
                pst.setString(1, logUser);
                pst.setString(2, logType);
                pst.setString(3, logSystem);
                pst.setString(4, format(dNow));
                pst.executeUpdate();

在 SQL Server 上的命令会给你服务器所在时区的日期。但是如果你使用 Java 中的命令,你可以指定时区(或将其明确设置为 GMT)。 - Naidu Ypvs
@NaiduYpvs 如果是这样,我有一个关于Java和SQL的情景,当我更新时,如果最终用户更改了他的时间,它会更新最终用户的时间吗? - Sathish Kumar k k
老实说,你应该使用GregorianCalendar,因为你可以为它设置时区格式。由于Java代码在服务器上运行,它将采用服务器的默认时间格式。 - Naidu Ypvs
@NaiduYpvs 我觉得我明白了我需要的要点,举个例子来说。如果Java代码是为独立应用程序编写的,那么它只会使用最终用户的系统时间。如果我在我的Java代码中使用SQL Server的日期查询,就像我在语句1中所做的那样,那么它将插入带有服务器时间的记录,这将是所有最终用户都使用的共同时间。对吗? - Sathish Kumar k k
1
但我仍然建议您使用GregorianCalendar而不是日期。 - Naidu Ypvs
@Naidu Ypvs 如果我使用语句2,我肯定会使用GregorianCalendar。但是根据我的要求,我将使用语句2,因为我需要所有最终用户都使用通用时间。 - Sathish Kumar k k
1个回答

0

第一种方法直接使用SQL函数。它具有数据库依赖性。第二种方法通过Java方法传递,不能直接使用SQL函数。它没有数据库依赖性。如果您想使用可移植代码,请使用第二种方法。


我同意你的观点。但我的要求是,我插入的“日期和时间”不应该来自最终用户的计算机,因为他/她会根据自己的个人需求更改时间,所以我将直接使用SQL函数。嘿,你有其他的替代方案吗? - Sathish Kumar k k
“用户不想更改数据库”是什么意思?我没有完全理解你的观点。 - Sathish Kumar k k
@SathishKumarkk 我的意思是从SQL Server转移到Postgres服务器或其他数据库服务器。 - Sai Ye Yan Naing Aye
我明白了,这不会发生任何数据库更改。但是从您的回复中,我有一个问题,如果我需要更改数据库,那么是否有任何方法可以为所有用户使用公共日期和时间? - Sathish Kumar k k
@SathishKumarkk,你可以使用其他选项,比如使用Joda时间或者使用java.sql.timestamp。 - Sai Ye Yan Naing Aye
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接