对于可能在此绊倒的其他人,此问题中提到的链接会产生误导性结果
我的第一次约会:1986-04-08。当前日期:2013-11-28。
代码:
public long seconds(Date date){
String formattedDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",getResources().getConfiguration().locale).format(Calendar.getInstance().getTime());
String DateStr=String.valueOf(formattedDate);
Date d = null;
try {
d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",getResources().getConfiguration().locale).parse(DateStr);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
java.sql.Date dx = new java.sql.Date(d.getTime());
Date d1 = date;
Date d2 = dx;
t4.setText("BirthDate"+date+"\n Current Date:"+dx);
long seconds = (d2.getTime()-d1.getTime())/1000;
return seconds;
}
但是当我在这里检查结果时:http://www.calculator.net/age-calculator.html?today=04%2F04%2F1986&ageat=11%2F28%2F2013&x=32&y=10它给了我一个略微不同的结果。我不确定我哪里出错了。
答案 0 :(得分:4)
您链接的在线服务是错误的:它将年龄计算为整天,然后假定每天正好是24小时。大部分时间都是正确的,但在世界上大多数地方都有夏令时转换和时区转换的日子,这意味着有23天,25天或其他一些小时的天数。从Java代码中获得的数字更精确。
答案 1 :(得分:2)
我认为你在某种程度上混合了java.sql.Date和java.util.Date。
我会尝试简化代码。这样的事情。
public class Test012 {
public static void main(String[] args) throws Exception {
System.out.println( seconds() );
System.out.println( seconds2() );
System.out.println( days3() );
}
public static long seconds() throws Exception {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
java.util.Date d1 = sdf.parse("1986-04-08");
java.util.Date d2 = sdf.parse("2013-11-28");
return ( d2.getTime() - d1.getTime() ) / 1000;
}
public static long seconds2() throws Exception {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
java.util.Date d1 = sdf.parse("1986-04-08");
java.util.Date d2 = new java.util.Date();
return ( d2.getTime() - d1.getTime() ) / 1000;
}
public static long days3() throws Exception {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
java.util.Date d1 = sdf.parse("2008-01-01");
java.util.Date d2 = sdf.parse("2009-01-01");
return ( d2.getTime() - d1.getTime() ) / 1000 / 60 / 60 / 24;
}
}
我也试过
select datediff(ss, '4/8/1986', '11/28/2013') --- US date format
在SQL Server中它打印与此java程序相同的东西, 它打印872294400.所以这似乎是正确的值。
您确定输入的日期是正确的吗? (等于我在测试程序中硬编码的那些)? 我也会检查一下。
另外,您确定您的日期零时间部分吗?这就是您发布的链接/服务所假设的内容。
答案 2 :(得分:0)
试试这段代码: -
public static long secondsBetween(Calendar startDate, Calendar endDate) {
Calendar date = (Calendar) startDate.clone();
long daysBetween = 0;
while (date.before(endDate)) {
date.add(Calendar.DAY_OF_MONTH, 1);
daysBetween++;
}
return daysBetween*24*3600;
}
希望它能帮助你......享受......!