我需要一个在这些时间之间计算毫秒数的算法
HH:MM:SS,MS --> HH:MM:SS,MS
00:08:50,800 --> 00:08:55,250
我写了4次java代码,但我觉得我不明白这个想法,我搜索了它,但所有解决方案都使用了库,我不想使用库。
这是我写的java代码,但它没有给我正确的偏移量
private int findOffset(Time t1, Time t2) {
int offset = 0;
int diffHH = (t2.getHH() - t1.getHH());
int diffMM = (t2.getMM() - t1.getMM());
int diffSS = (t2.getSS() - t1.getSS());
int diffMS = (t2.getMS() - t1.getMS());
if (diffHH != 0) {
if (diffHH < 0) {
diffHH = 24 - t1.getHH() + t2.getHH();
}
offset += (3600000 * diffHH);
}
if (diffMM != 0) {
if (diffMM < 0) {
diffMM = 60 - t1.getMM() + t2.getMM();
}
offset += (60000 * diffMM);
}
if (diffSS != 0) {
if (diffSS < 0) {
diffSS = 60 - t1.getSS() + t2.getSS();
}
offset += (1000 * diffSS);
}
if (diffMS != 0) {
if (diffMS < 0) {
diffMS = t1.getMS() + t2.getMS();
}
offset -= diffMS;
}
return offset;
}
这是另一个代码
private int findOffset2(Time t1, Time t2) {
int offset = 0;
int hh1 = t1.getHH(), hh2 = t2.getHH();
int mm1 = t1.getMM(), mm2 = t2.getMM();
int ss1 = t1.getSS(), ss2 = t2.getSS();
int ms1 = t1.getMS(), ms2 = t2.getMS();
while (hh1 != hh2 || mm1 != mm2
|| ss1 != ss2 || ms1 != ms2) {
offset++;
ms1++;
while (ms1 >= 1000) {
ss1++;
while (ss1 >= 60) {
ss1 -= 60;
mm1++;
}
while (mm1 >= 60) {
mm1 -= 60;
hh1++;
}
ms1 -= 1000;
}
if(hh1 == hh2 && mm1 == mm2
&& ss1 == ss2 && ms1 == ms2){
System.out.println("test");
}
}
return offset;
}
答案 0 :(得分:4)
想法是将Time转换为ms并返回diff:
private int timeToMs(Time t) {
return t.getHH() * 60 * 60 * 1000 + t.getMM() * 60 * 1000 + t.getSS() * 1000 + t.getMS();
}
private int findOffset(Time begin, Time end) {
return timeToMs(end) - timeToMs(begin);
}
编辑:这个答案假定给定的时间是在同一天。
答案 1 :(得分:2)
private int findOffset(Time t1, Time t2) {
int hh1 = t1.getHH(), hh2 = t2.getHH();
int mm1 = t1.getMM(), mm2 = t2.getMM();
int ss1 = t1.getSS(), ss2 = t2.getSS();
int ms1 = t1.getMS(), ms2 = t2.getMS();
int offset = ((((hh2 - hh1) * 60) + (mm2 - mm1)) * 60) + (ss2 - ss1)) * 1000 + (ms2 - ms1);
if (offset < 0)
offset += 24*60*60*1000;
return offset;
}
请注意,这总是给出0到23h 59m 59.999ms范围内的答案。这个问题没有具体规定两个时间的任何日期;因此,真正的答案可能是+或 - N天(其中N可以是任何整数)。