从MySQL到Java的日期问题(时区添加)
我有一个名为从MySQL到Java的日期问题(时区添加),java,mysql,date,time,Java,Mysql,Date,Time,我有一个名为startDate的字段,其类型为TIMESTAMP我从MySQL InnoDB数据库获得: SELECT startDate FROM jn.all WHERE id IN(115) =>2012-07-28 00:00:00 在Java中,我会: java.util.Date d = resultSet.getDate("startDate"); SimpleDateFormat tsmpFormatter = new SimpleDateFormat("yyyy-MM-dd
startDate
的字段,其类型为TIMESTAMP
我从MySQL InnoDB数据库获得:
SELECT startDate FROM jn.all WHERE id IN(115)
=>2012-07-28 00:00:00
在Java中,我会:
java.util.Date d = resultSet.getDate("startDate");
SimpleDateFormat tsmpFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
tsmpFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(tsmpFormatter.format(d));
我得到:
=>2012-07-2804:00:00
从UTC到东部标准时间有4小时。数据库时间为UTC
SELECT now();
=>2013-07-2921:46:26
而我现在的EST时间是17:46:26
为什么即使我在任何地方都使用UTC,我仍会得到4小时的差异?谢谢
编辑:
我可能发现了这个问题
MySQL将时间戳值从当前时区转换为UTC进行存储,并从UTC转换回当前时区进行检索。(这不适用于其他类型,如DATETIME。)
但是现在的时区是什么?服务器应为UTC。请尝试使用:
java.sql.Timestamp ts = resultSet.getTimestamp("mvStartDate");
resultSet.getDate()
返回java。sql.Date而不是java。util.Date
使用java。<强> UTIL>强> >日期松散的时间信息。
< P>我已经肯定你已经在别处读过了,但是你可以考虑一下,知道时区,可以忽略它们。这是一个小小的精神投资,但它的灵活性和力量是值得的。对不起,各位,我找到了自己的答案。这个解决方案在我看来很荒谬,但你能做什么呢 从结果集中获取数据时,我必须通过日历
Date begin = resultSet.getDate("startDate", new GregorianCalendar(TimeZone.getTimeZone("UTC")));
在使用java.util.date之前,您应该知道默认时区。 您的代码可以是:
... TimeZone.setDefault(TimeZone.getTimeZone("UTC")); ... java.util.Date d = resultSet.getDate("mvStartDate"); SimpleDateFormat tsmpFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); tsmpFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println(tsmpFormatter.format(d)); ... ... TimeZone.setDefault(TimeZone.getTimeZone(“UTC”)); ... java.util.Date d=resultSet.getDate(“mvStartDate”); SimpleDataFormat tsmpFormatter=新的SimpleDataFormat(“YY-MM-dd HH:MM:ss”); tsmpFormatter.setTimeZone(TimeZone.getTimeZone(“UTC”); System.out.println(tsmpFormatter.format(d)); ...
我肯定JodaTime也会表现出同样的行为。MySQL驱动程序正试图做一些不应该做的聪明事情。因为从1970年开始,它给我的毫秒不是UTC,而是EST(+4小时->凌晨4点UTC)。看看我的答案。啊,这很奇怪。我必须承认我没有使用
时间戳
列格式。但是,如果没有盲目的“使用joda!”回答,什么样的日期/时间问题才算完整你知道为什么当前时区是EST而不是UTC吗?