我正在开发一个比赛计时系统,在某些情况下,我需要从H2DB中检索一个时间对象。像其bretheren(或sisteren)一样,time数据类型是相对于1970年1月1日的,并且以SQL形式以“
hh:mm:ss”格式表示,日期默认情况下设置为01-01-1970。默认情况下,它映射到“
java.sql.Time”对象。作为值得信赖的padawan,我将以下代码编码为显示目的,将小时与分钟分开。
if(race.getCutOffTime()!=null){
long cutOffHour=(race.getCutOffTime().getTime())/(3600000);
int cutOffMinute=(int)(race.getCutOffTime().getTime()%(60*60*1000));
System.out.println(cutOffHour+":"+cutOffMinute);
}
但是,Java的时间处理方式会产生臭味,因为这些函数输出意外的值,例如,我的数据库中的以下语句给出的输出为3:30。
INSERT INTO MagEye.Races(RaceName, EventID,CutOffTime)
VALUES ('TEST', SELECT EventID FROM MagEye.Events
WHERE EventName='Sabrina Love',TIME '5:50:00');
更改此语句以反映时间“ 0:0:0”,给我一个值“ -2:00”,这是我做错了吗?先感谢您)。
*_根据要求进行 _ *编辑 ,这是我的数据库代码:
表创建语句:
CREATE TABLE IF NOT EXISTS MagEye.Races (RaceID INT PRIMARY KEY AUTO_INCREMENT , RaceName VARCHAR(100) ,EventID INT, Description TEXT, MaxEntrants INT, MinAge INT, MaxAge INT, RacePrefix VARCHAR (5), TimingMethod CHAR(1), CutOffTime TIME, RaceEnd TIMESTAMP,Finished BOOLEAN DEFAULT FALSE, Autostart BOOLEAN, FOREIGN KEY(EventID) REFERENCES MagEye.Events(EventID));
插入声明:
INSERT INTO MagEye.Races(RaceName, EventID,CutOffTime) VALUES ('TEST', SELECT EventID FROM MagEye.Events WHERE EventName='Sabrina Love',TIME '5:50:00');
恢复:
raceDB.result = raceDB.state.executeQuery("SELECT * FROM MagEye.Races WHERE EventID=" + eventID + " ORDER BY RaceName");
java.util.ArrayList<Race> races = new java.util.ArrayList<>();
while (raceDB.result.next()) {
Race thisRace;
String timingMethodString = raceDB.result.getString("TimingMethod");
Race.TimingMethod timingMethod = null;
if (timingMethodString != null) {
timingMethod = Race.TimingMethod.valueOf(timingMethodString);
} else {
timingMethod = Race.TimingMethod.MANUAL;
}
thisRace = new Race(raceDB.result.getInt("RaceID"), event, raceDB.result.getString("RaceName"), raceDB.result.getString("Description"), raceDB.result.getInt("MaxEntrants"), raceDB.result.getInt("MinAge"), raceDB.result.getInt("MaxAge"), raceDB.result.getString("RacePrefix"), timingMethod,(raceDB.result.getTime("CutOffTime")), raceDB.result.getBoolean("Autostart"));
thisRace = new Race(raceDB.result.getInt("RaceID"), event, raceDB.result.getString("RaceName"), raceDB.result.getString("Description"), raceDB.result.getInt("MaxEntrants"), raceDB.result.getInt("MinAge"), raceDB.result.getInt("MaxAge"), raceDB.result.getString("RacePrefix"), timingMethod,(raceDB.result.getTime("CutOffTime")), raceDB.result.getBoolean("Autostart"));
显示:
if(race.getCutOffTime()!=null){
long cutOffHour=(int)(race.getCutOffTime().getTime())/(3600000);
RacesCutOffLength.setText(cutOffHour+"");
int cutOffMinute=(int)(race.getCutOffTime().getTime()%(60*60*1000));
this.RacesMinutes.setText(cutOffMinute+"");
}
else{
RacesCutOffLength.setText("0");
RacesMinutes.setText("0");
}
编辑 :我已经决定将Time对象替换为长本原语
java.util.Date
是 始终 UTC时间。因此,根据您的语言环境,可能会有偏移。
我听说过Joda Time
作为处理时间的更好的Java API。
无论如何,问题出在混合由java.util.Date
SQL 处理的日期和其他直接作为SQL一部分传递的日期。
只要您继续使用java.util/sql.Date
所有内容(并且您不会在数据库内部达到顶峰)(并且您不更改语言环境),结果就会保持一致。当您的SQL尝试直接将值作为文本传递时,麻烦就开始了。因此,无论是Date
在各处使用,还是如垃圾桶所说的,每次使用a时Date
,都要注意将语言环境设置为“
GMT”(这样内部表示形式和Date的输出是相同的)。请注意,这确实包括Date
从数据库返回的信息
具有矩阵A的: 我想计算所有行中两个相邻数字之间的最大和最小差异。然后过滤以仅限制相邻数字min小于4和7之间的行,最大值在6和12之间的行。输出应该返回无行。 对于以下矩阵: 结果应该是第1行
我想计算2个月之间的差异,我不想考虑一个月是30天,并且以毫秒的时间来转换它们,我不想使用像焦达这样的库,我也找到了一个使用LoalDead的解决方案,但是我使用的是java 7。我寻找我的问题的答案,但找不到任何答案,我尝试了许多方法,我尝试创建一个日历,并以毫秒为单位传递我的两个日期之间的差异,但如果我尝试获取15/04和15/5之间的差异,我将得到30天,而不是1个月,下面是代码 我可以用什
问题内容: 我必须找到java中两个不同日期对象之间的时间差异,如果该时间超过5秒,我必须使会话无效。 这是场景: 我有一个jsp页面,它每5秒设置一次会话 我还有另一个jsp页面,每1秒访问一次, 现在,我必须在我提到的另一个jsp中进行比较,并使会话无效, 因此,如果差异超过5秒,则会话无效。 问题答案:
本文向大家介绍Java中Array的长度和ArrayList的大小之间的差异,包括了Java中Array的长度和ArrayList的大小之间的差异的使用技巧和注意事项,需要的朋友参考一下 在集合中,主要功能需求之一就是获取要存储在我们的集合中的元素数量,以便可以决定是否在其中添加更多元素。同样,元素的数量对于集合的迭代也是必需的。 众所周知,Array和Arraylist都用于存储元素,但是都有不
我正在Windows 8.1 64位上开发java swing应用程序,带有4GB内存和JDK版本8u20 64位。 问题是当我使用带有监视器选项的Netbeans profiler启动应用程序时。 加载第一个Jframe时,应用程序Memory Heap约为18mb,JVM进程大小约为50mb(Image1)。 然后,当我启动另一个Jframe时,它包含一个带有webView的JFxPanel,
我可以使用MomentJs获得两个日期之间的差异,如下所示: 但是,我还想在适用的情况下显示小时(仅当>=60分钟过去时)。 但是,当我尝试使用以下命令检索持续时间小时数时: 它返回的是当前小时,而不是两个日期之间的小时数。 我如何得到两个时刻之间的小时差?