2014-07-08 135 views
0

我是Java新手,尝试一些练习练习以更好地理解它。计算Java中两个日期之间的天数

我给自己设置了练习,通过控制台输入不同的字符串,整数等,并将输入写入文本文件。所有这些工作正常。

现在我想在项目启动时以及何时结束时输入到文本文件中。这没有任何问题。

现在,这是我的问题。我想计算项目从开始到结束以天为单位的持续时间。

目前只计算日期,忽略月份和年份。

For example: (dd.mm.yyyy) 
Start: 07.07.2014 End: 15.07.2014 Output: 8 (almost correct :)) 
Another example: 
Start 07.07.2014 End: 03.08.2014 Output: -3 (not even close) 

我只是不知道我的问题在哪里。

感谢您的帮助! 克里斯

System.out.print("Start project (dd.mm.yyyy): "); 
String beginn = input.nextLine(); 
DateFormat df = new SimpleDateFormat("dd.mm.yyyy"); 
Date d = null; 
try { 
    d = df.parse(beginn); 
} catch (ParseException e) { 
    System.out.println("Unable to parse " + beginn); 
} 
DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG); 
String s3 = df3.format(d); 

System.out.print("End of project (dd.mm.yyyy): "); 
String ende = input.nextLine(); 
DateFormat df4 = new SimpleDateFormat("dd.mm.yyyy"); 
Date g = null; 
try { 
    d = df.parse(ende); 
} catch (ParseException f) { 
    System.out.println("Unable to parse " + ende); 
} 
//DateFormat df5 = DateFormat.getDateInstance(DateFormat.LONG); 
//String s4 = df5.format(d); 


// String dauer = input.nextLine(); 
diffDays = 0; 
try { 
    DateFormat dfa = new SimpleDateFormat("dd.mm.yyyy"); 
    Date from = dfa.parse(beginn); 
    Date to = dfa.parse(ende); 
    long diffMillis = to.getTime() - from.getTime(); 
    //diffDays = Math.round((double)diffMillis/(24. * 60.*60.*1000.)); 
    diffDays = diffMillis/(1000 * 60 * 60 * 24); 
    System.out.println(diffDays); 
} catch (ParseException ex) { 
    ex.printStackTrace(); 
} 
+0

这里是执行日期操作一个不错的库:[乔达时间(HTTP: //www.joda.org/joda-time/)。这里是一个例子:http://stackoverflow.com/a/15541322/2806497 – OlivierH

+0

可能重复的[计算两个Java日期实例之间的差异](http://stackoverflow.com/questions/1555262/calculating-the-两个java-date-instances之间的差异) – Jens

+0

用'1000 * 60 * 60 * 24'进行划分会给你夏季时间开始日期范围的错误答案。不要认为每天都有24小时。 –

回答

0

您的格式是错误的。

DateFormat df = new SimpleDateFormat("dd.MM.yyyy"); 

根据documentation,MM指定月份,其中mm指定分钟。在Java中8

+0

作品!令人惊讶的是,这些小错误让我感到沮丧超过两个小时。非常感谢你的帮助! – user3013909

0

例子:
获取java.sql.Date从现在的天数:

LocalDate startDate = LocalDate.now(); 
Instant instant = dueDate.toInstant(); 
LocalDate endDate = instant.atZone(ZoneId.systemDefault()).toLocalDate(); 
long dueDays = ChronoUnit.DAYS.between(startDate, endDate); 
System.out.println("XXX is due in " + dueDays); 
相关问题