Date date = //getting Date object of (record inserted datetime) using Hibernate query .
DateTime currentDateTime = new DateTime(System.currentTimeMillis(), DateTimeZone.UTC);
System.out.println("Current Date Time " + currentDateTime);
DateTime utcDateTime = new DateTime(date, DateTimeZone.UTC);
System.out.println("UTC Date Time :: " + utcDateTime);
Period per = new Period(currentDateTime.toLocalDateTime(), utcDateTime.toLocalDateTime());
System.out.println("Period time in sec ::" + (float) per.toStandardSeconds().getSeconds());
System.out.println("Period time in minutes::" + (float) per.toStandardSeconds().getSeconds() / 60);
System.out.println("Period time in hours::" + (float) per.toStandardSeconds().getSeconds() / (60 * 60));
我在从MySQL DB获取数据时使用joda API和Hibernate。我将所有带有UTC时区的数据存储在MySQL数据库中。现在我想得到当前时间和插入记录之间的时间差。我的本地时区是GMT + 5:30。我在时差上错误的时间(+5:30小时与实际差异)。不知道我在哪里做错了吗?
编辑:
我正在使用此代码将日期存储在DB中。
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(format);
DateTime dateTime = new DateTime(DateTimeZone.UTC);
return dateTime.toString(dateTimeFormatter);
答案 0 :(得分:0)
你的问题很混乱,应该重写。
默认情况下,无需调用currentTimeMillis,因为DateTime会这样做。
无需调用toLocalDateTime。当你想要丢失时区时会使用它,但你已经在UTC中,所以没有时区适用,所以不需要删除时区。
你正在用println行计算秒,分钟,小时。 PeriodFormatterBuilder
类执行此类工作。
您需要清楚java.util.Date和java.sql.Date。后者将时间部分设置为零。没有时区。请注意与Java捆绑的第三种类型java.sql.Timestamp。
调试并发布此类问题时,请获取支持Date和DateTime对象的毫秒数,以便我们获得准确的数据。在我平常的工作中,我避免在几毫秒内使用或思考,但是对于调试它可能很有用。
正如Jon Skeet所说,您应该将日期时间值作为日期时间类型存储在数据库中而不是字符串中。
我建议您在提供示例代码的许多类似问题中搜索StackOverflow。