我在 SO 上找到了一些类似的Que,但没有找到解决方案。
我今天有Date
如下:(我们将其视为 Date1 ,其值为2012-06-22
)< / p>
Calendar cal = Calendar.getInstance();
SimpleDateFormat dateformatter = new SimpleDateFormat("yyyy-MM-dd");
Date start = cal.getTime();
String currentDate=dateformatter.format(start);
我从用户那里检索了4个值:
5
)1
)2012
)7
)所以这个日期,比如 Date2 变为2012-01-05
( yyyy-MM-dd )以及否。天数设置为7
。
我想比较日期1 和日期2 - 否。几天。
我知道通过使用以下代码段,特别是没有。天数可以从日历实例中减去。
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -7);
但由于我String
形式的 Date2 ,我无法遵循此方法。
任何帮助表示赞赏。
根据您的建议,我们可以使用String
的{{1}}方法将Date
转换为parse
。
现在我有2 SimpleDateFormat
个对象。
Date
,days
和months
方面找到差异?years
,比如说7
?答案 0 :(得分:2)
使用SimpleDateFormat
将String
(代表日期)转换为Date
例如:
Date parsedDate = new SimpleDateFormat("yyyy-MM-dd").parse("2012-01-05");
答案 1 :(得分:2)
如果可能使用Joda Time代替Date
/ Calendar
,请执行此操作。它会让你的生活更轻松。
如果没有,听起来你不想格式化当前日期 - 而是要从用户解析 Date2
:< / p>
Date date2 = dateFormatter.parse(text);
然后你可以 创建一个日历并减去特定的天数,或者(如果你在谈论经过的时间 - 你需要考虑你在这里围绕DST过渡和时区的行为你可以从date2.getTime()
中减去7 * 24 * 60 * 60 * 1000毫秒。
从根本上说,您应该尽可能早地转换字符串格式的 out ,并且只在您确实需要时才将转换为字符串格式 - 当然不能用于比较。此数据的自然表示形式为Date
或Calendar
(假设您坚持使用JDK),因此需要努力将数据转换为该表示形式。
您需要考虑几个真正的“商业”问题:
在尝试实现代码之前,您应该回答之前的所有问题,因为它会影响您使用的表示形式。此外,在开始实施之前,为您能想到的所有内容编写单元测试。
答案 2 :(得分:2)
根据我的理解,您现在有两个日期,并且您希望从日期中减去特定天数。
首先,您可以使用SimpleDateFormat
将日期转换为字符串,将字符串转换为日期
现在减去天数7.你可以得到日期的时间并从中减去7 * 24 * 60 * 60 * 1000
long daybeforeLong = 7 * 24 * 60 * 60 * 1000;
try {
Date todayDate = new Date();
long nowLong = todayDate.getTime();
Date beforeDate = new Date((nowLong - daybeforeLong));
}
catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 3 :(得分:1)
我认为你可以利用java提供的Comparator来做比较和排序日期的工作。 这是link
希望你得到你想要的东西..