我需要做的是:
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。
有什么建议吗?有没有更有效的方法来做到这一点?
答案 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时间实例。