2012-10-22 38 views
1

所以我想减去2日我想出了这个代码:的Android减法日期

java.text.DateFormat df = new java.text.SimpleDateFormat("hh:mm:ss_yyyy.MM.dd"); 
java.util.Date date1 = new java.util.Date(); 
java.util.Date date2 = df.parse("00:00:00_2013.01.01"); 
long diff = date2.getTime() - date1.getTime(); 

但问题是DIFF是不正确的。

有人可以告诉我我做错了什么吗?

+0

你为什么要把它们变成日期然后减去?简单地减去长的值,然后将结果转换为日期时间:) – Lucifer

+1

问题是'diff'代表什么?天的差异?周?年份?分钟?你的解决方案@Lucifer将带来疯狂的结果。昨天从今天减去将导致02.01.1970这意味着你要什么? – WarrenFaith

+0

我有实际的日期“新日期()”和结束日期。 –

回答

5

你在评论中的比较样本是错误的。我试过你的代码,并得到这个结果:

try { 
    DateFormat df = new SimpleDateFormat("hh:mm:ss_yyyy.MM.dd"); 
    Date date1 = new java.util.Date(); 
    Date date2 = df.parse("00:00:00_2013.01.01"); 
    long diff = date2.getTime() - date1.getTime(); 
    Log.e("TEST" , date1.getTime() + " - " + date2.getTime() + " - " + diff); 
} catch (ParseException e) { 
    Log.e("TEST", "Exception", e); 
} 

date1: 1350921506492 
date2: 1356994800000 
diff: 6073293508 

diff/1000/60/60/24 = 70,292748935 

大致检查70天,直到新的一年听起来坚实。

+1

为什么java日期类太可怕了? C#DateTime大大简化了工作。 – Zapnologica

+1

@Zapnologica与最早版本的Java捆绑在一起的旧日期时间类是业界首次认真对待日期时间这个非常棘手的问题,这个问题几十年来一直被忽视。这些类是基于在IBM和Taligent完成的工作。但是你是对的,最终他们失败了,在设计和实施上都有缺陷。解决方案是开源的Joda-Time库或Java 8及更高版本中内置的新Java时间包(受Joda-Time启发)。 –