Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java joda API和UTC时区的分钟/小时时差错误_Java_Mysql_Hibernate_Jodatime_Intervals - Fatal编程技术网

Java joda API和UTC时区的分钟/小时时差错误

Java joda API和UTC时区的分钟/小时时差错误,java,mysql,hibernate,jodatime,intervals,Java,Mysql,Hibernate,Jodatime,Intervals,我使用JodaAPI和Hibernate从MySQL数据库获取数据。我正在MySQL数据库中存储UTC时区的所有数据。现在我想得到当前时间和插入的记录之间的时差。我的本地时区是格林尼治标准时间+5:30。我在时差上得到了错误的时间(+5:30小时,实际差异)。不知道我哪里做错了? 编辑: 我正在使用此代码在DB中存储日期 Date date = //getting Date object of (record inserted datetime) using Hibernate query .

我使用JodaAPI和Hibernate从MySQL数据库获取数据。我正在MySQL数据库中存储UTC时区的所有数据。现在我想得到当前时间和插入的记录之间的时差。我的本地时区是格林尼治标准时间+5:30。我在时差上得到了错误的时间(+5:30小时,实际差异)。不知道我哪里做错了?

编辑:
我正在使用此代码在DB中存储日期

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));

你的问题令人困惑,应该重写

无需调用currentTimeMillis,因为默认情况下DateTime会这样做

无需致电toLocalDateTime。当您想失去时区,但您已经在UTC,因此不适用时区,因此无需放弃时区时,将使用该选项

你在用println行计算秒、分钟、小时时工作太辛苦了。这个班做这样的工作

您需要清楚java.util.Date和java.sql.Date。后者将时间部分设置为零。两者都没有时区。请注意与Java捆绑的第三种类型

在调试和发布此类问题时,获取返回日期和日期时间对象的毫秒数,以便获得准确的数据。在我的日常工作中,我避免在毫秒内使用或思考,但对于调试来说,它是有用的

正如Jon Skeet所说,您应该将日期时间值存储为数据库中的日期时间类型,而不是字符串


我建议您在StackOverflow中搜索许多提供示例代码的类似问题。

它是java.util.Date。请参阅更新的问题。我不知道您是如何从上面的评论到编辑的…我在那里提到,我正在从DB获取Date对象。您的问题仍然没有显示java.util.Date,为什么要使用字符串表示来存储日期?为什么你还没有提供任何价值观?基本上这里有很多未知的东西,我们帮不了你…@VishalZanzrukia:“日期对象”可能仍然是java.util.Date或java.sql.Date。如果您是从数据库中获取的,那么java.sql.Date实际上会更常见。您好@Basil,非常感谢您的回答和这么好的建议。但我真的不明白这是怎么让人困惑的。我在数据库中没有使用
VARCHAR
datetype,而是使用
DATETIME
。我只是用
String
来存储它。这会有什么问题吗?除此之外,我只是从数据库中存储和检索数据。它给了我错误的数据。怎么用?这就是问题所在。如果可能的话,请帮助我查看我的新问题,通过这个问题,您可能会更清楚:
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(format);
DateTime dateTime = new DateTime(DateTimeZone.UTC);
return dateTime.toString(dateTimeFormatter);