import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class test {
/*
* Calculate the difference between two date/times *
*
*/
private static long dateDiff(Date toDate, Date fromDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(toDate);
long ms = cal.getTimeInMillis();
cal.setTime(fromDate);
ms -= cal.getTimeInMillis();
return ms;
}
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
Date d1 = null;
Date d2 = null;
try {
d1 = sdf.parse("11:00:00");
d2 = sdf.parse("10:00:00");
} catch (Exception e) {
e.printStackTrace();
}
long result = dateDiff(d1, d2);
Date time = new Date(result);
System.out.println(time);
}
}
当我运行它时,我得到了这个结果:
Thu Jan 01 02:00:00 CET 1970
我希望1小时的差异?!再次出现Timezone的问题?
我知道如何解决它。
全部
答案 0 :(得分:3)
我不知道您的期望是什么,但您实际上在做的是使用默认时区输出与1970年1月1日午夜后一小时相对应的日期。
您似乎希望Date表示持续时间(即秒数)。它不会这样做,Date格式化程序也不会将日期作为持续时间。
我需要两个Date字段之间的时差,然后将它放在MySql(时间格式)
中
对于您要执行的操作,您需要将持续时间值计算为 long
,然后使用java.sql.Time(long)
构造函数创建Time
对象。您可以使用其toString()
方法序列化此对象,也可以将其用作JDBC预处理语句中的参数。
事实证明,我上面的建议也是错误的。
您真正的问题是SQL时间类型用于表示时间...而不是持续时间。实际上,SQL没有专用的持续时间类型,因此您可以做的最好是将持续时间表示为整数秒或毫秒或其他。
(对于更一般的情况,通常认为Joda Time库提供了操作日期,时间和相关时间值的最佳API。但对于这个简单的情况,标准J2SE库应该足够......只要你正确使用它们。)
答案 1 :(得分:2)
问题是两种日期类型的差异不能用另一种日期类型表示。
答案 2 :(得分:1)
为什么不花两个日期的毫秒并将它们相互减去呢?
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
long d1ms = cal.getTimeInMillis();
cal.setTime(d2);
long d2ms = cal.getTimeInMillis();
long diffMs = d1ms - d2ms;
long diffHour = diffMs * 1000 * 60 * 60;
答案 3 :(得分:0)
您可以尝试将此设置时区设为GMT。在结果时差中删除每天,每月的单词。自从1970年1月1日开始时间计数器以来,这个方法只做了几毫秒。所以如果你的结果说1970年1月3日意味着自计时器启动以来已过去3天,这是完美的。你只需要正确解释它,但格式化你的答案
...
long result = dateDiff(d1, d2); //This is your code in main([])
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss SSS");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormat.format(new Date(result )));