Java / Servlet:获取当前的sql.Date

时间:2009-05-06 12:39:12

标签: java sql datetime locale

我需要做的是:

1)从请求中获取用户的语言环境。

2)根据用户的语言环境创建具有当前日期和时间的新sql.Date对象

3)将其写入MySQL db,列类型:TIMESTAMP

我得到的是:

java.util.Locale locale = request.getLocale();

java.text.DateFormat dateFormat =
java.text.DateFormat.getDateTimeInstance(
                        java.text.DateFormat.LONG, java.text.DateFormat.LONG, locale );

java.util.Date date = new java.util.Date();

java.sql.Date sqlDate = new java.sql.Date( date.getTime() );

日期没问题,但时间有问题 - 总是凌晨12:00:00。

有什么建议吗?有没有更有效的方法来做到这一点?

5 个答案:

答案 0 :(得分:17)

即使是更紧凑的解决方案;)

java.sql.Date timeNow = new Date(Calendar.getInstance().getTimeInMillis());

答案 1 :(得分:9)

还有一个简单的解决方案。 使用此代码使用java.util.Date获取当前日期

java.util.Calendar cal = java.util.Calendar.getInstance();
java.util.Date utilDate = cal.getTime();
java.sql.Date sqlDate = new Date(utilDate.getTime());

答案 2 :(得分:4)

如果你想要时间,你需要一个java.sql.Timestamp而不是java.sql.Date,以及数据库中的timestamp列。

答案 3 :(得分:0)

请注意,request.getLocale使用Accept-Language标题的值,并且可能无法始终为您提供正确的区域设置。

答案 4 :(得分:0)

根据区域设置获取时区可能不是他们的实际时区

一个例子:在澳大利亚,语言环境是“en-AU”,但我们有几个时区,最多有3个小时的差异。

我猜在美国他们也有这个问题。

可能的解决方案是存储UTC时间。如果用户然后调整他的时区,比如他的prefrences,或者你使用其他方法传递时区(客户端/浏览器信息说通过AJAX),那么你可以使用{{1}调整UTC时间实例。