【问题标题】:Subtracting and comparing Dates减去和比较日期
【发布时间】:2013-03-01 22:44:18
【问题描述】:

我在 SO 上找到了一些类似的 Que,但没有找到解决方案。

我今天的Date 如下:(假设这是Date1,它的值是2012-06-22

    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) 以及 No。天数设置为7


我想比较 Date 1Date 2-No。天

我知道通过使用以下sn-p,特别没有。可以从日历实例中减去天数。

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -7);

但由于我的 Date2 格式为String,因此我无法采用这种方法。

任何帮助表示赞赏。

编辑:

根据您的建议,我可以使用SimpleDateFormatparse 方法将String 转换为Date

现在我有 2 个Date 对象。

  • 如何找到它们在daysmonthsyears 方面的差异
  • 如何减去特定编号。天,比如7,从特定日期,比如2012-01-05

【问题讨论】:

标签: java android date calendar


【解决方案1】:

使用SimpleDateFormatString(代表日期)转换为Date

例如:

Date parsedDate  = new SimpleDateFormat("yyyy-MM-dd").parse("2012-01-05");

【讨论】:

【解决方案2】:

如果您可以可能使用Joda Time 而不是Date/Calendar,请这样做。它会让您的生活更轻松。

如果不是,听起来您不想格式化当前日期 - 相反,您想解析来自用户的Date2

Date date2 = dateFormatter.parse(text);

然后您可以或者创建一个日历并减去特定天数,或者(如果您在谈论经过的时间 - 您需要在此处考虑您在 DST 转换和时区方面的行为) 你可以从 date2.getTime() 中减去 7 * 24 * 60 * 60 * 1000 毫秒。

从根本上说,您应该尽可能早地转换out 字符串格式,并且只在真正需要时才将to 转换为字符串格式——当然不是为了比较。此数据的自然表示形式为 DateCalendar(假设您坚持使用 JDK),因此请努力将您的数据转换为该表示形式。

不过,您有几个真正的“业务”问题需要考虑:

  • 您要将当前日期与用户给出的日期进行比较,还是将当前日期和时间与用户给出的日期进行比较?
  • 您希望用户输入使用哪个时区?
  • 您是在考虑经过的天数还是“逻辑”天数?由于 DST 转换,早于 1.30am 的 7 * 24 小时可能是 2.30am,反之亦然

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

【讨论】:

  • 两个日期的时区相同,因此没有关于过渡的问题。我想将今天的日期与特定日期(将使用 parse 方法从字符串创建)进行比较。
  • 请查看已编辑的问题。
【解决方案3】:

据我了解,您现在有两个日期,您想从日期中减去特定天数。

首先您可以使用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();
}

【讨论】:

    【解决方案4】:

    我认为你可以利用 java 提供的 Comparator 来比较和排序日期。 这是link

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

    【讨论】:

    • 请查看已编辑的问题。
    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多