【问题标题】:How to check if the date is today or not如何检查日期是否是今天
【发布时间】:2018-04-09 18:40:33
【问题描述】:

我得到的当前日期如下:

public void getCurrentDate(View view) {
    Calendar calendar = Calendar.getInstance();
    SimpleDateFormat mdformat = new SimpleDateFormat("yyyy / MM / dd ");
    String strDate = "Current Date : " + mdformat.format(calendar.getTime());
    display(strDate);
}
private void display(String num) {
    TextView textView = (TextView) findViewById(R.id.current_date_view);
    textView.setText(num);
}

但我想检查日期是否是今天的日期。但我不知道如何检查。

【问题讨论】:

  • 不幸的是,Android 会给你系统日期,可以很容易地从设置中更改。要获得实际日期,您需要使用互联网验证
  • 顺便考虑扔掉长期过时且臭名昭著的麻烦SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .使用起来感觉好多了。

标签: android date date-comparison


【解决方案1】:

您可以按照@aliaksei 的回答进行操作,效果很好。但在 Android 中,如果 java.time 不可用,您也可以使用 java.time(API 级别 26)或 ThreetenABP

但首先您必须考虑“今天的日期”是相对的事实。现在,此时此刻,世界的每一个角落都可能处于不同的“今天”。在美国和欧洲是 4 月 10 日,但在太平洋的某些地区已经是 4 月 11 日。

你可以选择一个特定的时区,或者只使用设备的时区,我认为是这样。在这种情况下,只需使用 JVM 默认时区即可。

然后您使用 ThreetenABP 将Calendar 转换为LocalDate,然后与今天的日期进行比较:

// calendar I want to check
Calendar cal = ...

// convert to LocalDate
LocalDate date = DateTimeUtils.toZonedDateTime(cal).toLocalDate();

// compare with today (now() is using the JVM default timezone)
if (date.isEqual(LocalDate.now(ZoneId.systemDefault()))) {
    // today
}

【讨论】:

  • @OleV.V.对我来说,有两种方法仍然令人困惑:equals 和 isEqual。阅读文档我发现它们之间确实存在细微差别。无论如何,谢谢!
  • 当您比较 ZonedDateTime 对象时,差异会变得更加明显。 isEqual 将告诉您它们是否表示相同的时间点,而equals 将检查它们是否完全相等(相同区域或更多)。最重要的是,我不喜欢 equals 的类型不安全:它毫无异议地接受任何 Object,可能会给您留下非常奇怪的结果。
【解决方案2】:
public static boolean isSameDay(Calendar cal1, Calendar cal2) {
    if (cal1 == null || cal2 == null) {
        throw new IllegalArgumentException("The dates must not be null");
    }
    return (cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA) &&
            cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&
            cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR));
}

或者你可以使用这个 sn-p 来自的DateUtils 类:)

【讨论】:

  • 调用方法时这里的两个参数是什么。 isSameDay(日历 cal1,日历 cal2)@aliaksei
  • 既然可以使用 .DATE,为什么还要让事情变得过于复杂?
猜你喜欢
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 2012-01-03
相关资源
最近更新 更多