我有两个Date
个。如何区分这两个日期之间的差异?
我听说过SimpleDateFormat
,但我不知道如何使用它。
我试过了:
String fromdate = "Apr 10 2011";
SimpleDateFormat sdf;
sdf = new SimpleDateFormat("MMM DD YYYY");
sdf.parse(fromdate);
Calendar cal = Calendar.getInstance();
cal.setTime(sdf);
我也试过这个:
String date1 = "APR 11 2011";
String date2 = "JUN 02 2011";
String format = "MMM DD YYYY";
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date dateObj1 = sdf.parse(date1);
Date dateObj2 = sdf.parse(date2);
long diff = dateObj2.getTime() - dateObj1.getTime();
int diffDays = (int) (diff / (24* 1000 * 60 * 60));
System.out.println(diffDays);
但我得到了例外情况“非法模式字符'Y'。”
答案 0 :(得分:2)
其他答案都是正确但过时的。
java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如java.util.Date
,.Calendar
和& java.text.SimpleDateFormat
。 Joda-Time团队还建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。
大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。
LocalDate
LocalDate
类表示没有时间且没有时区的仅限日期的值。
我建议尽可能使用标准ISO 8601格式作为字符串。但在您的情况下,我们需要指定格式模式。
String input = "Apr 10 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MMM d uuuu" );
LocalDate earlier = LocalDate.parse ( input , f );
DateTimeFormatter formatterOut = DateTimeFormatter.ofLocalizedDate ( FormatStyle.MEDIUM ).withLocale ( Locale.US );
String output = earlier.format ( formatterOut );
LocalDate later = earlier.plusDays ( 13 );
long days = ChronoUnit.DAYS.between ( earlier , later );
转储到控制台。
System.out.println ( "from earlier: " + earlier + " to later: " + later + " = days: " + days + " ending: " + output );
从早期:2011-04-10到晚:2011-04-23 =天:13结束:2011年4月10日
答案 1 :(得分:1)
这是一篇使用Calendar来解决此问题的文章。 http://tripoverit.blogspot.com/2007/07/java-calculate-difference-between-two.html
我相信Joda Time还为这种情况提供了API支持
答案 2 :(得分:1)
你有两个Date对象吗?
答案不能简单。
public double computeDaysBetweenDates(Date d1, Date d2) {
long diff;
diff = d2.getTime() - d1.getTime();
return ((double) diff) / (86400.0 * 1000.0);
}
日期对象是包含UTC POSIX EPOCH时间的long的精简包装器,这是自UTC时间1970年1月1日午夜以来经过的毫秒数。只需从较晚的值中减去较早的值,即可得到间隔的毫秒数。知道了,你只需要除以一天中的毫秒数。
请注意,这个答案假设一天是86400秒,而且......大多数情况都是如此。
请注意,即使您已格式化日期字符串,此解决方案仍然适用。如果您能够首先将日期/时间解析为Date对象,那么您仍然可以使用它们调用此函数。
答案 3 :(得分:0)
此代码应该向您展示如何做您需要的......
public static void main(String[] args) {
Calendar firstOfTheMonthCalendar = Calendar.getInstance();
firstOfTheMonthCalendar.set(Calendar.DAY_OF_MONTH, 1);
Date firstOfTheMonthDate = firstOfTheMonthCalendar.getTime();
Date nowDate = new Date();
int diffInDays = determineDifferenceInDays(firstOfTheMonthDate, nowDate);
System.out.println("Number of days betweens dates: " + diffInDays);
}
private static int determineDifferenceInDays(Date date1, Date date2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(date1);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(date2);
long diffInMillis = calendar2.getTimeInMillis() - calendar1.getTimeInMillis();
return (int) (diffInMillis / (24* 1000 * 60 * 60));
}
答案 4 :(得分:0)
Difference between two date strings in java
这将有助于您获得一些想法