这是我的java类
public class dateparse {
public static void main(String args[]) throws ParseException
{
Date dd=new Date();
int year = Calendar.getInstance().get(Calendar.YEAR);
int month=0;
int calc_days=0;
String d1 = dd.getDate()+"/"+dd.getMonth()+"/"+year;
String d2 = "19/1/2014";
SimpleDateFormat s1 = new SimpleDateFormat("dd/mm/yyyy");
SimpleDateFormat s2 = new SimpleDateFormat("dd/mm/yyyy");
Date dateOne = new SimpleDateFormat("dd/mm/yyyy").parse(d1);
Date dateTwo = s2.parse(d2);
long diff = dateOne.getTime() - dateTwo.getTime();
calc_days= (int) (diff / 1000 / 60 / 60 / 24 / 1);
}
}
我正在尝试找出当前日期与指定的日期之间的差异,关于秒,分钟,小时,天,月和年。我的输入日期是2014年2月19日。我想显示不同的天(例如10天)或月数+天(例如1个月和2天)或年+月+天(例如1年2个月和4天)。但是当我运行此代码时,它返回差异为-10天。
答案 0 :(得分:3)
您的错误是您的解析。小写m
表示分钟,而不是月份:
SimpleDateFormat s2 = new SimpleDateFormat("dd/mm/yyyy");
应该是:
SimpleDateFormat s2 = new SimpleDateFormat("dd/MM/yyyy");
这是一个简单的例子:
String d1 = "21/1/2014";
String d2 = "19/1/2014";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date dateOne = sdf.parse(d1);
Date dateTwo = sdf.parse(d2);
long diff = dateOne.getTime() - dateTwo.getTime();
int differenceInDays = (int) (diff / 1000 / 60 / 60 / 24 / 1);
System.out.println(differenceInDays);
打印:2
答案 1 :(得分:2)
这是由Java提供的可怕API引起的经典错误: date.getMonth()在1月份返回0,在2月份返回1,在12月份返回11。如果可以,请尝试避免使用java.util.Date和Calendar:P
答案 2 :(得分:1)
注意 - 接受的答案是错误的!证明:
在我的时区"欧洲/柏林"中使用日期2014-03-19和2014-04-01 作为输入。 真正的答案是13天,因为每个人都可以轻松使用标准日历,但是@Duncan接受的代码会产生 12天,因为在我的时区有一个dst-jump打破计算公式的基础(1天= 24小时)。 3月30日那天只有23个小时。
JDK pre 8没有为此问题提供内置的通用解决方案。另请注意,您的输入只是一对两个简单的日期,没有时间。因此,在几秒钟内询问差异是愚蠢的。仅仅要求天,月,周或年的差异是明智的。在Java 8中,您可以执行以下操作:
// only days
LocalDate start = LocalDate.of(2014, 3, 19); // start in March
LocalDate end = LocalDate.of(2014, 4, 1);
int days = ChronoUnit.DAYS.between(start, end); // 13
// period in years, months and days
LocalDate start = LocalDate.of(2014, 2, 19); // start in February
LocalDate end = LocalDate.of(2014, 4, 1);
Period period = Period.between(start, end); // P1M13D = 1 month + 13 days
很遗憾,您无法自由选择喜欢的日历单位来表达差异。 JodaTime(和我的库)使用PeriodType
进行了更灵活的方法。