为什么 Java 向我的 DateTime 添加 1h?
Why is Java adding 1h to my DateTime?
我有两个 DateTime (Joda) 变量:
DateTime from = new DateTime(2015, 1, 1, 0, 0, 0, 0);
DateTime to = new DateTime(2015, 3, 31, 0, 0, 0, 0);
我将这些变量传递给另一个方法:
AtmosphericDb.GetParameterMetaRecords(AtmosphericParameter.Dust_Coarse, from , to);
SQL 查询中使用了这些日期:
String sql = "SELECT *
FROM metalinks
WHERE parameter_name = ?
AND date_from >= ?
AND date_to <= ?; ";
PreparedStatement preparedStatement = metaStoreConnection.prepareStatement(sql);
preparedStatement.setString(1, parameter.name().replace('_', '-').toLowerCase());
preparedStatement.setDate(2, new java.sql.Date(from.toDate().getTime()));
preparedStatement.setDate(3, new java.sql.Date(to.toDate().getTime()));
ResultSet resultset = preparedStatement.executeQuery();
一切正常,但是当我没有得到预期的结果时,我发现传递给 SQL 查询中的 to
参数的 DateTime 不正确。
System.out.println(preparedStatement);
上面这行代码打印出如下内容:
SELECT *
FROM metalinks
WHERE parameter_name = 'dust-coarse'
AND date_from >= '2015-01-01 +00:00:00'
AND date_to <= '2015-03-31 +01:00:00'
现在,为什么 2015-03-31 +01:00:00
中有 +01:00:00
而不是 +00:00:00
?
英国在 3 月 26 日从标准时间 +00:00:00
改为夏令时 +01:00:00
。毫无疑问,您 运行 您的程序在设置为本地的平台上英国时间。
编辑:2015 年是 3 月 29 日。
我有两个 DateTime (Joda) 变量:
DateTime from = new DateTime(2015, 1, 1, 0, 0, 0, 0);
DateTime to = new DateTime(2015, 3, 31, 0, 0, 0, 0);
我将这些变量传递给另一个方法:
AtmosphericDb.GetParameterMetaRecords(AtmosphericParameter.Dust_Coarse, from , to);
SQL 查询中使用了这些日期:
String sql = "SELECT *
FROM metalinks
WHERE parameter_name = ?
AND date_from >= ?
AND date_to <= ?; ";
PreparedStatement preparedStatement = metaStoreConnection.prepareStatement(sql);
preparedStatement.setString(1, parameter.name().replace('_', '-').toLowerCase());
preparedStatement.setDate(2, new java.sql.Date(from.toDate().getTime()));
preparedStatement.setDate(3, new java.sql.Date(to.toDate().getTime()));
ResultSet resultset = preparedStatement.executeQuery();
一切正常,但是当我没有得到预期的结果时,我发现传递给 SQL 查询中的 to
参数的 DateTime 不正确。
System.out.println(preparedStatement);
上面这行代码打印出如下内容:
SELECT *
FROM metalinks
WHERE parameter_name = 'dust-coarse'
AND date_from >= '2015-01-01 +00:00:00'
AND date_to <= '2015-03-31 +01:00:00'
现在,为什么 2015-03-31 +01:00:00
中有 +01:00:00
而不是 +00:00:00
?
英国在 3 月 26 日从标准时间 +00:00:00
改为夏令时 +01:00:00
。毫无疑问,您 运行 您的程序在设置为本地的平台上英国时间。
编辑:2015 年是 3 月 29 日。