我会得到一个像Sat May 31 16:38:17 GMT 2014
这样的日期。在DB中,列也具有相同的值。但是当我搜索Sat May 31 16:30:00 GMT 2014
之类的日期时,它不会搜索。但如果我提供的5:30 hours
少于Sat May 31 11:00:00 GMT 2014
。它工作正常。
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone( "GMT-0:00" ));
cal.setTimeInMillis(inputDate.getTime());
cal.set(Calendar.MILLISECOND, 0);
inputDate = cal.getTime();
答案 0 :(得分:0)
Date
和Calendar
的底层实现都使用相同的系统:a long
表示自1970年1月1日,格林威治标准时间0:00:00以来的毫秒数。
有关Date
(第136行和第168行)和Calendar
cal.setTimeInMillis(inputDate.getTime());
// this gets the long from the Date and puts it into the Calendar
// nothing is changed, you only get added functionality
// even if you change the Timezone this only affects how it is displayed
cal.set(Calendar.MILLISECOND, 0);
// the long is modified by setting the that represents only milliseconds to zero
inputDate = cal.getTime();
//the long is stored in a Date and returned
(第778行)
所以这让我们知道了:
Date
你找回了一个最小化的System.out.println(new Date())
对象。没有第二条指令就根本没有变化。
这解释了为什么没有转换,但不是为什么选择不起作用。
根据您提供的信息,似乎数据库,JVM和您的系统的三位一体的时区不匹配。
这一点:您的系统设置为IST,您的JVM以某种方式将您的系统时间解释为GMT。要检查这一点,您可以运行{{1}}。如果它将时区写为GTM,但数字与系统时钟(IST)相同,那么这就是你的问题。
您还可以查看: