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

Java 如何在android中显示日期名称和当前日期的数字,java,android,calendar,dayofweek,dayofmonth,Java,Android,Calendar,Dayofweek,Dayofmonth,嗨,我正在实现一个叫做日历的功能。现在,从当前月份名称和当前年份开始,从本节开始,如何显示日名称和日数 代码: 示例:2020年12月 预期产出: Wed -9 Thu -10 Fri -11 Sat- 12 Sun- 13 有谁能帮我实现我的目标吗?这就行了 public void printDaysOfMonth(int year, int month) { Calendar calendar = Calendar.getInstance(); SimpleDateFor

嗨,我正在实现一个叫做日历的功能。现在,从当前月份名称和当前年份开始,从本节开始,如何显示日名称和日数

代码:

示例:2020年12月

预期产出:

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日这两天可以完成工作

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和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不需要Android API级别26吗? time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

在Java8和更高版本以及API级别为26的较新Android设备上,内置了现代API。 在非Android Java 6和7中,获得了Three Ten Backport,即JSR 310的现代类Three Ten的Backport;请参阅底部的链接。 在较旧的Android上,可以使用desugaring或Android版本的ThreeTen Backport。它叫ThreeTenABP。在后一种情况下,请确保使用子包从org.threeten.bp导入日期和时间类。 链接 解释如何使用java.time。 ,其中首次描述了java.time。 ,java.time的后端口到JSR-310的Java6和Java7。 ,Android版Three Ten Backport ,解释得非常透彻。 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。对于手机应用程序中的显示,您可能更喜欢d

编辑:为下周的几天初始化如下日期:

    LocalDate currentDay = LocalDate.now(ZoneId.systemDefault());
    LocalDate endDateExclusive = currentDay.plusWeeks(1);
在一个月的最后一周运行代码时,可能会包含下个月的天数,这似乎与您所说的不一致:现在从当前月份名称和当前年份开始…。我希望你能找到满意的解决办法

问:java.time不需要Android API级别26吗? time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

在Java8和更高版本以及API级别为26的较新Android设备上,内置了现代API。 在非Android Java 6和7中,获得了Three Ten Backport,即JSR 310的现代类Three Ten的Backport;请参阅底部的链接。 在较旧的Android上,可以使用desugaring或Android版本的ThreeTen Backport。它叫ThreeTenABP。在后一种情况下,请确保使用子包从org.threeten.bp导入日期和时间类。 链接 解释如何使用java.time。 ,其中首次描述了java.time。 ,java.time的后端口到JSR-310的Java6和Java7。 ,Android版Three Ten Backport ,解释得非常透彻。 你可以用一个声明的with来做

初始值与今天一样 月末终止值 一天增值 在循环体内部,打印3个字母的工作日名称,即EEE和月份的日期,即用DateTimeFormatter.ofPatternEEE-d,Locale.ENGLISH格式化的日期的d

输出:

注意:从今天开始,这个月的所有日期都是两位数字,因此您使用d或dd表示月份的日期并不重要。但是,如果您的要求是始终以两位数打印月日,例如01而不是1,请在DateTimeFormatter模式中使用dd

一些有用的注释:

java.util的日期时间API及其格式化API SimpleDataFormat已经过时,并且容易出错。建议完全停止使用,并切换到。了解有关现代日期时间API的更多信息,请访问

无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7

如果您正在为一个Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并执行。

您可以使用声明的

初始值与今天一样 月末终止值 一天增值 在循环体内部,打印3个字母的工作日名称,即EEE和月份的日期,即用DateTimeFormatter.ofPatternEEE-d,Locale.ENGLISH格式化的日期的d

输出:

注: 从今天开始,这个月的所有日期都是两位数字,因此您使用d或dd表示月份的日期并不重要。但是,如果您的要求是始终以两位数打印月日,例如01而不是1,请在DateTimeFormatter模式中使用dd

一些有用的注释:

java.util的日期时间API及其格式化API SimpleDataFormat已经过时,并且容易出错。建议完全停止使用,并切换到。了解有关现代日期时间API的更多信息,请访问

无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7



如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并重试。

请不要教年轻人使用早已过时且臭名昭著的SimpleDataFormat类。至少不是第一个选择。而且不是毫无保留的。今天我们有了更好的in和它的DateTimeFormatter。是的,你可以在Android上使用它。对于较老的Android,请参见。请不要教年轻人使用过时且臭名昭著的SimpleDateFormat类。至少不是第一个选择。而且不是毫无保留的。今天我们有了更好的in和它的DateTimeFormatter。是的,你可以在Android上使用它。对于较旧的Android,请参见。我得到的输出如下:周三、周四、周五4、周五5、周六6。但我期望从当前的一周日期(周四10、周五11、周六12、周日13)开始,这就是我期望的。没有预期的输出我被提到过sameis在日期之后想要显示我编辑并显示另一种初始化开始和结束日期的方式。也许你可以用它作为灵感,找到一种方法来得到你想要的。我得到的输出是这样的,星期三,星期四,星期四,星期五,星期五,星期六6。但我期待从现在的星期日,星期四,星期五,星期五,星期六12,sun 13这就是我所期望的没有预期的输出我被提到sameis在日期之后想要显示我编辑并显示另一种初始化开始和结束日期的方式。也许你可以用它作为灵感,找到一种获得你想要的东西的方法。仅供参考,你使用的是可怕的日期时间类,多年前被JSR 310.FYI中定义的现代java.time类所取代,您正在使用可怕的日期时间类,这些类在几年前被JSR310中定义的现代java.time类所取代。假设今天是星期二,那么如何将该文本更改为today@jyothisri-如果您知道周号,例如,Tue每周都有,并且如果您向我提供周号,那么将一天(如Tue)转换为本地日期并不困难月份数,例如本月的第二个星期二或类似于本年第49周的星期二,我会让您知道如何将该周的星期二转换为本地日期。这就是你要找的其他东西吗?我想显示,而不是今天的名称为星期二,然后想显示Today@jyothisri-为此,请使用System.out.printlndate.equalstoday?今天-+date.getDayOfMonth:date.Formatter;。如果有任何进一步的疑问,请随时发表评论。假设今天是星期二,如何将该文本更改为today@jyothisri-如果您知道周号(如星期二)并且您向我提供当月的周号(如本月的第二个星期二)或类似的星期二,那么将一天(如星期二)转换为本地日期并不困难今年第49周,我会让你知道如何将该周的星期二转换为本地日期。这就是你要找的其他东西吗?我想显示,而不是今天的名称为星期二,然后想显示Today@jyothisri-为此,请使用System.out.printlndate.equalstoday?今天-+date.getDayOfMonth:date.Formatter;。如果有任何进一步的疑问,请随时发表评论。