比较给定日期和当前日期(不包含给定时区中的时间部分)的最佳方法

迪帕克·库马尔(Deepak Kumar)

我的要求是将给定时区中特定格式的给定日期与同一时区中的当前日期进行比较。另外,在比较时,我必须忽略时区。并且比较结果应为:0或1或-1

我尝试过的一种方法是

  1. 设置所需的时区
  2. 使用“ new Date()”获取当前日期,并使用“ yyyy-MM-dd”将其格式化,然后再次解析以获取日期对象
  3. 对提供的日期字符串使用相同的格式化程序进行比较
  4. 然后使用compareTo比较两个日期,从而得到所需的结果
public void compareDate(){

    TimeZone.setDefault(TimeZone.getTimeZone("America/New_York"));
    SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
    Date todayDate = dateFormatter.parse(dateFormatter.format(new Date()));
    Date date = dateFormatter.parse("2021-02-28");
    System.out.println(todayDate.compareTo(date));

}

但是以上对我来说似乎效率很低。

另一种方法可能是同时获得两个日期,然后进行比较?

public static Date getDateWithoutTimeUsingCalendar() {
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);

    return calendar.getTime();
}

有人可以建议一个更好的选择吗?

只有一件事,时区和没有时间的比较必须存在。

阿文德·库玛·阿维纳什(Arvind Kumar Avinash)

java.util日期时间API及API格式,SimpleDateFormat都已经过时,而且容易出错。建议完全停止使用它们,并切换到最新的日期时间API*

使用java.time API(现代日期时间API)的演示

import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        // Tests
        try {
            System.out.println(compareWith("2021-02-28", "yyyy-MM-dd", "Asia/Calcutta"));
            System.out.println(compareWith("2021/03/03", "yyyy/MM/dd", "Asia/Calcutta"));
        } catch (DateTimeException e) {
            System.out.println("Date string parsing error occured.");
        }
    }

    static int compareWith(String strDate, String format, String timezone) throws DateTimeException {
        ZoneId zoneId = ZoneId.of(timezone);
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format, Locale.ENGLISH);

        ZonedDateTime today = ZonedDateTime.now(zoneId).with(LocalTime.MIDNIGHT);
        ZonedDateTime date = LocalDate.parse(strDate, dtf).atStartOfDay(zoneId);

        return today.compareTo(date);
    }
}

输出:

1
-1

Trail:Date Time了解更多有关现代日期时间API的信息


*出于任何原因,如果您必须坚持使用Java 6或Java 7,则可以使用ThreeTen-BackportThree.java的大部分功能向Java 6和7进行反向移植。级别仍不与Java-8兼容,请检查可通过desugaring获得的Java 8+ API,以及如何在Android Project中使用ThreeTenABP

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

比较给定日期和当前日期(不包含给定时区中的时间部分)的最佳方法

来自分类Dev

给定日期/时间和时区,如何将其转换为UTC时间戳?

来自分类Dev

用Javascript计算给定日期是当前日期还是将来的日期?

来自分类Dev

PURE SQL 获取给定日期和当前日期之间的天数,没有函数

来自分类Dev

如何使用moment.js和moment-timezone.js将特定时区(非本地)的给定日期/时间转换为UTC

来自分类Dev

将从用户获取的给定日期与当前日期匹配

来自分类Dev

在 Pandas 中查找包含最接近给定日期时间的字符串

来自分类Dev

如何在 Javascript 中获取给定日期、时间和区域的时间戳

来自分类Dev

如何显示给定日期数组中显示活动和不活动的月份

来自分类Dev

Prolog,比较日期以查看给定日期之前

来自分类Dev

计算包含给定日期的日期范围

来自分类Dev

通过比较当前时间和给定时间将日期增加1天

来自分类Dev

我们如何计算给定日期和时间给定地点的太阳位置?

来自分类Dev

在给定日期时间之前查找列表中的最新日期时间

来自分类Dev

strtotime可以在给定日期之后返回一天中的日期和时间吗?

来自分类Dev

将日期和月份与给定日期分开

来自分类Dev

将日期和月份与给定日期分开

来自分类Dev

选择给定日期和日期之间的记录。

来自分类Dev

给定日期范围内当前周的天数

来自分类Dev

在Python中从给定日期查找日期

来自分类Dev

如何获取特定周中给定日期的日期?

来自分类Dev

给定日期的最大日期 - sql

来自分类Dev

Rails 4:在当前日期和给定的特定日期/过去的天数之间选择记录

来自分类Dev

如何比较日期变量与给定时间?

来自分类Dev

如何指定给定日期对象的时间?

来自分类Dev

从给定日期提取日期,月份和年份的最快方法是什么?

来自分类Dev

从给定日期提取日期,月份和年份的最快方法是什么?

来自分类Dev

如何在Flutter中检查当前日期和时间是否在两个给定的日期和时间之间

来自分类Dev

查询以在记录“开始”和“停止”日期的表中查找给定日期的活动记录

Related 相关文章

  1. 1

    比较给定日期和当前日期(不包含给定时区中的时间部分)的最佳方法

  2. 2

    给定日期/时间和时区,如何将其转换为UTC时间戳?

  3. 3

    用Javascript计算给定日期是当前日期还是将来的日期?

  4. 4

    PURE SQL 获取给定日期和当前日期之间的天数,没有函数

  5. 5

    如何使用moment.js和moment-timezone.js将特定时区(非本地)的给定日期/时间转换为UTC

  6. 6

    将从用户获取的给定日期与当前日期匹配

  7. 7

    在 Pandas 中查找包含最接近给定日期时间的字符串

  8. 8

    如何在 Javascript 中获取给定日期、时间和区域的时间戳

  9. 9

    如何显示给定日期数组中显示活动和不活动的月份

  10. 10

    Prolog,比较日期以查看给定日期之前

  11. 11

    计算包含给定日期的日期范围

  12. 12

    通过比较当前时间和给定时间将日期增加1天

  13. 13

    我们如何计算给定日期和时间给定地点的太阳位置?

  14. 14

    在给定日期时间之前查找列表中的最新日期时间

  15. 15

    strtotime可以在给定日期之后返回一天中的日期和时间吗?

  16. 16

    将日期和月份与给定日期分开

  17. 17

    将日期和月份与给定日期分开

  18. 18

    选择给定日期和日期之间的记录。

  19. 19

    给定日期范围内当前周的天数

  20. 20

    在Python中从给定日期查找日期

  21. 21

    如何获取特定周中给定日期的日期?

  22. 22

    给定日期的最大日期 - sql

  23. 23

    Rails 4:在当前日期和给定的特定日期/过去的天数之间选择记录

  24. 24

    如何比较日期变量与给定时间?

  25. 25

    如何指定给定日期对象的时间?

  26. 26

    从给定日期提取日期,月份和年份的最快方法是什么?

  27. 27

    从给定日期提取日期,月份和年份的最快方法是什么?

  28. 28

    如何在Flutter中检查当前日期和时间是否在两个给定的日期和时间之间

  29. 29

    查询以在记录“开始”和“停止”日期的表中查找给定日期的活动记录

热门标签

归档