我在 mysql 中有一个查询,它比较像这样的 2 个日期
convert_tz(updatedDate,'+05:30','-05:00') < ?
convert 函数以美国时间返回列 createddate 的值。当我在 mysql 查询浏览器中运行此查询时
convert_tz(updatedDate,'+05:30','-05:00') < '2013-04-14 09:30:00'
例如,它给了我正确的值
product count
------- ------
A 123
B 7
现在,我正在使用这样的 PreparedStatement 在 java 中设置它
pst.setTimestamp(1, new java.sql.Timestamp(end.getTimeInMillis()));
rs=pst.executeQuery();
System.out.println("=====new Open Tickets Query executed=====");
System.out.println(pst);
最后一行打印整个查询,设置的值为
convert_tz(updatedDate,'+05:30','-05:00') < '2013-04-14 09:30:00'
但它给了我这样不同的价值观
product count
------- ------
A 155
B 19
所以,我怀疑是时区问题我将代码更改为
end.setTimeZone(TimeZone.getTimeZone("America/New York"));
pst.setTimestamp(1, new java.sql.Timestamp(end.getTimeInMillis()));
rs=pst.executeQuery();
System.out.println("=====new Open Tickets Query executed=====");
System.out.println(pst);
但它仍然给出相同的错误结果。
更多信息:我如何设置日历结束变量
我有一个 Web 应用程序,它给了我日期字符串“2013-04-14 09:30:00”
DateFormat df1=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Calendar end=Calendar.getInstance();
end.setTime(df1.parse(endString));
end.set(Calendar.HOUR, 9);
end.set(Calendar.MINUTE, 30);
end.set(Calendar.SECOND, 0);
另外,对于我尝试使用 java.util.Date 对象的实验,它给了我正确的结果,下面是代码
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
end.setTime(sdf.parse("2012-10-01 00:00:00"));
pst.setTimestamp(1, new java.sql.Timestamp(end.getTime()));
更新:- 如果我使用不推荐使用的方法,答案是正确的
pst.setTimestamp(1, new java.sql.Timestamp(octDate.get(Calendar.YEAR)-1900,octDate.get(Calendar.MONTH),octDate.get(Calendar.DATE),octDate.get(Calendar.HOUR),octDate.get(Calendar.MINUTE),octDate.get(Calendar.SECOND),0));
pst.setTimestamp(2, new java.sql.Timestamp(end.get(Calendar.YEAR)-1900,end.get(Calendar.MONTH),end.get(Calendar.DATE),end.get(Calendar.HOUR),end.get(Calendar.MINUTE),end.get(Calendar.SECOND),0));
更新2: - 在第一个答案的建议之后,我这样做了
1)SELECT NOW()
在mysql中执行并返回'2013-04-22 11:56:08'
2) 执行
System.out.println(new Date(System.currentTimeMillis()));
输出 :Mon Apr 22 11:56:25 IST 2013
意味着两个系统具有相同的时区