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

g9icjywg  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(339)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

26天前关门了。
改进这个问题
嗨,我正在实现一个叫做日历的功能。现在从当前月份名称和当前年份开始如何显示日期名称和日期编号。
代码:

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

有人能帮我实现我的目标吗

cs7cruho

cs7cruho1#

这就行了。

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

1sbrub3j

1sbrub3j2#

java.time和desugaring

考虑使用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 在格式模式字符串中。在手机应用程序中显示,您可能更喜欢 d .
编辑:对于下周的几天,初始化如下日期:

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

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

问:java.time不需要androidapi级别26吗?

java.time在较旧和较新的android设备上都能很好地工作。它至少需要Java6。
在Java8和更高版本以及更新的android设备上(api级别26),现代api是内置的。
在非android的java6和java7中获得了三个十的backport,即现代类的backport(三个十用于jsr310;请参见底部的链接)。
在旧的android上,要么使用desugaring,要么使用android版本的threeten backport。它叫3TENABP。在后一种情况下,请确保从导入日期和时间类 org.threeten.bp 有分装的。

链接

oracle教程:date time解释如何使用java.time。
java规范请求(jsr)310,其中 java.time 第一次被描述。
三十后港工程 java.time 到Java6和Java7(jsr-310为310)。
通过desugaring提供Java8+API
threetenabp,android版threeten backport
问:如何在android项目中使用threetenabp,有非常透彻的解释。

im9ewurl

im9ewurl3#

你可以用一个 for 循环声明为
今天的初始值
月末终止值
一天增值
在循环体内部,打印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 或者 dd 每月的某一天。但是,如果您的要求是打印月份的日期,请始终使用两位数(例如。 01 而不是 1 ),使用 ddDateTimeFormatter 图案。
一些有用的注解:
api的日期时间 java.util 以及它们的格式化api, SimpleDateFormat 过时且容易出错。建议完全停止使用它们,并切换到现代日期时间api。在trail:date-time了解有关现代日期时间api的更多信息。
出于任何原因,如果您必须坚持使用Java6或Java7,您可以使用threeten backport,它将大部分java.time功能向后移植到Java6和Java7。
如果您正在为一个android项目工作,并且您的android api级别仍然不符合java-8,请检查通过desugaring提供的java8+api以及如何在android项目中使用threetenabp。

相关问题