如何在 android 中显示当前日期的日期名称和数字

How to display day names and number from current date in android

您好,我正在实施一项名为日历的功能。 Now From current month name and current year from this 如何显示日期名称和日期编号。

代码:

cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
            Date startDate = cal.getTime();
            cal.add(Calendar.DATE, 6);
            Date endDate = cal.getTime();

            Log.d(TAG, "Start Date = " + startDate);
            Log.d(TAG, "End Date = " + endDate);

示例:Dec 2020

预期输出:

Wed -9
Thu -10
Fri -11
Sat- 12
Sun- 13

任何人都可以帮助我如何实现我的目标

这样就可以了。

public void printDaysOfMonth(int year, int month) {

    Calendar calendar = Calendar.getInstance();
    SimpleDateFormat formatter = new SimpleDateFormat("EEE-d", Locale.ENGLISH);
    calendar.set(year, month, 1);
    calendar.set(Calendar.DAY_OF_MONTH, 1);
    while (calendar.get(Calendar.MONTH) == month) {
        String fEndDate = formatter.format(calendar.getTime());
        System.out.println(fEndDate);
        calendar.add(Calendar.DATE, 1);
    }

}

注意: 1 月-0 和 12 月-11

java.time 和脱糖

考虑使用 java.time,现代 Java 日期和时间 API,作为您的日期和日历工作。

    DateTimeFormatter dayFormatter
            = DateTimeFormatter.ofPattern("EEE - ppd", Locale.ENGLISH);
    
    LocalDate currentDay = YearMonth.now(ZoneId.systemDefault()).atDay(1);
    LocalDate firstInNextMonth = currentDay.plusMonths(1);
    while (currentDay.isBefore(firstInNextMonth)) {
        System.out.println(currentDay.format(dayFormatter));
        currentDay = currentDay.plusDays(1);
    }

2020 年 12 月 运行 时的输出(节选):

Tue -  1
Wed -  2
Thu -  3
Fri -  4
Sat -  5
Sun -  6
Mon -  7
Tue -  8
Wed -  9
Thu - 10
Fri - 11
(--- cut ---)
Tue - 29
Wed - 30
Thu - 31

对于打印输出中月份的右对齐日期,我在格式模式字符串中使用了 ppd。对于在 phone 应用程序中显示,您可能更喜欢 d.

编辑:对于下周的几天 像这样初始化日期:

    LocalDate currentDay = LocalDate.now(ZoneId.systemDefault());
    LocalDate endDateExclusive = currentDay.plusWeeks(1);

当 运行在一个月的最后一周使用代码时,您可能会包含下个月的几天,这似乎与您所说的不一致:Now From当前月份名称和当前年份……。希望您能找到满意的解决方案。

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

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

  • 在 Java 8 和更新的 Android 设备上(从 API 级别 26)内置现代 API。
  • 非Android Java 6 和 7 获得 ThreeTen Backport,现代 类 的 backport(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在较旧的 Android 上使用脱糖或 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。在后一种情况下,请确保使用子包从 org.threeten.bp 导入日期和时间 类。

链接

您可以使用 for loop 声明的

  1. 初始值今天
  2. 终止值为月底
  3. 一天的增值

并在循环体内,打印日期的 3 个字母工作日名称(即 EEE)和日期(即 d),格式为 DateTimeFormatter.ofPattern("EEE - d", Locale.ENGLISH).

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Locale;

class Main {
    public static void main(String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE - d", Locale.ENGLISH);
        LocalDate today = LocalDate.now();
        for (LocalDate date = today; !date.isAfter(today.with(TemporalAdjusters.lastDayOfMonth())); date = date
                .plusDays(1)) {
            System.out.println(date.format(formatter));
        }
    }
}

输出:

Fri - 11
Sat - 12
Sun - 13
...
...
...
Wed - 30
Thu - 31

注意:这个月的所有日期,从今天开始,都是两位数,所以用d还是[=都没有关系17=] 代表一个月中的第几天。但是,如果您的要求是始终以两位数字打印日期(例如 01 而不是 1),请在 DateTimeFormatter 模式中使用 dd


一些有用的注释:

java.util 的日期时间 API 及其格式 API、SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern date-time API. Learn more about the modern date-time API at Trail: Date Time.

出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它向后移植了大部分 java.time 功能到 Java 6 & 7.

如果您正在为 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring and