Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MySQL到Java的日期问题(时区添加)_Java_Mysql_Date_Time - Fatal编程技术网

从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吗?