减去和比较日期

时间:2012-06-22 08:40:22

标签: java android date calendar

我在 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个对象。

  • 如何在Datedaysmonths方面找到差异
  • 如何减去特别没有。从某个特定日期开始说years,比如说7

4 个答案:

答案 0 :(得分:2)

使用SimpleDateFormatString(代表日期)转换为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 ,并且只在您确实需要时才将转换为字符串格式 - 当然不能用于比较。此数据的自然表示形式为DateCalendar(假设您坚持使用JDK),因此需要努力将数据转换为该表示形式。

您需要考虑几个真正的“商业”问题:

  • 您是否要将当前的日期与用户给定的日期进行比较,或者将当前的日期和时间与用户给出的日期进行比较?
  • 您希望用户输入什么时区?
  • 您是在考虑过去几天还是“合乎逻辑”的日子?由于DST过渡,因为比早上1点30分早7点30小时可能是凌晨2点30分,反之亦然

在尝试实现代码之前,您应该回答之前的所有问题,因为它会影响您使用的表示形式。此外,在开始实施之前,为您能想到的所有内容编写单元测试。

答案 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

希望你得到你想要的东西..