日历/日期时区转换问题

时间:2014-06-05 11:23:00

标签: java database

我会得到一个像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();

1 个答案:

答案 0 :(得分:0)

DateCalendar的底层实现都使用相同的系统: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行)

,请参阅Here

所以这让我们知道了:

Date

你找回了一个最小化的System.out.println(new Date())对象。没有第二条指令就根本没有变化。

这解释了为什么没有转换,但不是为什么选择不起作用。

根据您提供的信息,似乎数据库,JVM和您的系统的三位一体的时区不匹配。

这一点:您的系统设置为IST,您的JVM以某种方式将您的系统时间解释为GMT。要检查这一点,您可以运行{{1}}。如果它将时区写为GTM,但数字与系统时钟(IST)相同,那么这就是你的问题。

您还可以查看:

  • 执行insert语句的时间戳与数据库中的内容匹配
  • 执行数据库条目的时间戳与选择
  • 后收到的时间戳匹配