如何以编程方式获取月份的特定日期?

How to get specific date of the month programmatically?

如何以编程方式获取 android 中月份的特定日期?例如,我想将 2020 年 4 月 23 日作为字符串或整数放入 "if" 语句中。

示例

if("23 april 2020"){
// some code
} else if ("24 april 2020"){
// some code
}

你应该把你的字符串日期转换成日期格式,然后比较它们。

这是一个例子

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.getDefault());
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();

Date date1 = dateFormat.parse("2013-01-01");
Date date2 = dateFormat.parse("2013-01-02");

calendar1.setTime(date1);
calendar2.setTime(date2);

System.out.println("Compare Result : " + calendar2.compareTo(calendar1));
System.out.println("Compare Result : " + calendar1.compareTo(calendar2));

您可以通过调用 System.currentTimeMillis() 获取当前日期并使用 SimpleDateFormat 将其解析为字符串并进行比较。

这是一个例子:

final SimpleDateFormat sdf  = new SimpleDateFormat("dd MMMM yyyy", Locale.getDefault());
final String now = sdf.format(System.currentTimeMillis());

如@Hamid Reza 所述,您还可以将日期解析为字符串。其余取决于您的用例。

只需确保 select 解析日期的正确匹配模式,在您的情况下 dd MMMM yyyy

java.time 和 ThreeTenABP

    LocalDate apr23 = LocalDate.of(2020, Month.APRIL, 23);
    LocalDate apr24 = LocalDate.of(2020, Month.APRIL, 24);

    LocalDate today = LocalDate.now(ZoneId.of("Australia/Tasmania"));
    if (today.equals(apr23)) {
        System.out.println("It’s April 23");
    } else if (today.equals(apr24)) {
        System.out.println("It’s April 24");
    } else {
        System.out.println("It’s none of those dates");
    }

当我今天(2 月 8 日在塔斯马尼亚)运行 这个片段时,输出是:

It’s none of those dates

请在我输入 Australia/Tasmania 的地方插入您想要的时区。要使用设备的时区,请使用 ZoneId.systemDefault(),仅当心默认值可能会被您程序的其他部分或同一 JVM 中的任何其他程序 运行 更改,在这种情况下,您赢了'获取设备设置。

java.time LocalDate class 的对象表示日期。所以它既不是字符串也不是整数,但它是你所需要的。 java.time是现代的Java日期和时间API,强烈推荐。除了 equals() 之外,LocalDate 还有方法 isAfterisBefore。如果碰巧您的用户没有在 4 月 23 日恰好启动您的应用程序,您可以使用其中之一来确定日期已过(一旦用户 运行 应用程序)。

问题:java.time 不需要 Android API 26 级吗?

java.time 在新旧 Android 设备上都能很好地工作。它只需要至少 Java 6.

  • 在 Java 8 和更新的 Android 设备上(从 API 级别 26)内置了现代 API。
  • In-Android Java 6 和 7 获得 ThreeTen Backport,现代 classes 的 backport(ThreeTen 用于 JSR 310;请参阅底部的链接) .
  • 在(较旧的)Android 使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。并确保使用子包从 org.threeten.bp 导入日期和时间 classes。所以:

    import org.threeten.bp.LocalDate;
    import org.threeten.bp.Month;
    import org.threeten.bp.ZoneId;
    

    由于您使用的是 Gradle,因此您 build.gradle 中的这一行应该执行此操作(取自 Maven 存储库):

       compile group: 'com.jakewharton.threetenabp', name: 'threetenabp', version: '1.2.2'
    

    如果我没记错的话,这个语法也有效(保留任何拼写错误):

       compile 'com.jakewharton.threetenabp:threetenabp:1.2.2'
    

链接