2009-05-06 65 views
7

我需要做的是:Java/Servlet:获得当前sql.Date

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

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

3)把它写在MySQL数据库,列类型: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 AM。

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

回答

4

如果您想要时间,您需要java.sql.Timestamp而不是java.sql.Date和数据库中的timestamp列。

+0

没错。谢谢你的提示! – Artemij 2009-05-06 12:50:06

+0

谢谢。这就是我一直在寻找:) – 2015-11-17 08:57:00

0

请注意,request.getLocale使用Accept-Language标题的值,可能并不总是给你正确的语言环境。

+0

我会记住它。谢谢。 – Artemij 2009-05-06 16:53:42

0

获取基于语言环境的时区可能不是它们的实际时区

一个例子:在澳大利亚,语言环境为'en-AU',但我们有几个时区,长达3小时不同。

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

一个可能的解决方案是用存储UTC时间代替。如果用户随后调整他的时区,比如他的选择,或者使用其他方法传递时区(客户端/浏览器信息通过AJAX说),则可以使用java.util.Calendar实例来调整UTC时间。

+0

谢谢你的重要提示。你能提出一个优雅的解决方案的例子吗? – Artemij 2009-05-06 16:53:05

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()); 
17

即使是更紧凑的解决方案,以获得当前日期;)

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