首页 > 解决方案 > 如何在 android 中比较 mycurrent 日期和 Quarterwise

问题描述

嗨,在下面的代码中,我有一个从 Api 获取的日期列表。从 Arraylist 我正在检查每个日期。如果第一季度和上季度之间的日期。我正在显示计数。那个日期有多少次.

谁能帮我在哪里做错了

例子:

modifiedtime_list->29-05-2020
Firstquarter-> 01-04-2020
lastDayOfQuarter->30-06-2020

预期输出:1

爪哇:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    localModifiedDate = LocalDate.parse(opportunityModel.getModifiedtime());
                    Log.d("localModifiedDate", String.valueOf(localModifiedDate));
                    LocalDate localDate = LocalDate.now();
                    firstDayOfQuarter = localDate.with(localDate.getMonth().firstMonthOfQuarter())
                            .with(TemporalAdjusters.firstDayOfMonth());
                    Log.d("firstDayOfQuarter", String.valueOf(firstDayOfQuarter));

                    lastDayOfQuarter = firstDayOfQuarter.plusMonths(2)
                            .with(TemporalAdjusters.lastDayOfMonth());
                    Log.d("lastDayOfQuarter", String.valueOf(lastDayOfQuarter));

                    if (firstDayOfQuarter.isAfter(localModifiedDate) && lastDayOfQuarter.isBefore(localModifiedDate))  {

                            Count_opportunity = Collections.frequency(salesstage_list, "Opportunity");
                             System.out.println("Count_opportunity is:  "+ Count_opportunity);
}
}

标签: androiddate

解决方案


这是错误的:

    if (modifiedtime_list.contains(
            modifiedtime.compareTo(firstDayOfQuarter1) >= 0)
                    && (modifiedtime_list.contains(
                            modifiedtime.compareTo(lastDayOfQuarter1) >= 0))) {

为了便于阅读,我分成了几行。

您将布尔值传递给modifiedtime_list.contains()两次(false据我所知,两次)。如果我从您的代码中猜对了,它modifiedtime_list是一个String对象列表,因此它不包含任何布尔值。因此contains(),无论涉及哪个日期,都返回 false。

我建议:

  1. 不要为你的季度使用列表。开始和结束日期都很好。
  2. 不要使用字符串作为日期。LocalDate对象更好。
  3. 使用isBeforeisAfter/或isEqual方法LocalDate确定您的日期是否在季度内。或者使用:

        YearMonth firstYearMonthOfQuarter = YearMonth.from(time)
                .with(time.getMonth().firstMonthOfQuarter());
    

    然后将其YearMonth与代表相关季度第一个月的数据进行比较,看看它们是否相等。

编辑

这更接近:

    if (firstDayOfQuarter.isAfter(localModifiedDate)
            && lastDayOfQuarter.isBefore(localModifiedDate))  {

不过,恐怕您可能已经颠倒了每个子条件。如果我正确阅读了您的代码,您是在询问 3 月 1 日是否在 5 月 29 日之后,而 6 月 30 日是否在 5 月 29 日之前。这永远不会是真的——当用其他日子代替 5 月 29 日时也不会。如果每个部分都被否定,它会是什么样子?

    if (! firstDayOfQuarter.isAfter(localModifiedDate)
            && ! lastDayOfQuarter.isBefore(localModifiedDate))  {

将“不之后”视为“之前或之后”。并且“不在之前”作为“在或之后”。


推荐阅读