-1

我希望我的代码记录每月的某一天,比如每月的第一天,然后将其放入该月第一天所在的星期几的整数中。

例如。

星期三是 7 月的第一天,因此星期三是该月第一天的次数 + 1。

周一:0 周二:0 周三:1

但我不知道如何在 java 中编写代码。

4

2 回答 2

2

Java 提供了您需要的类YearYearMonth、 和DayOfWeek.

确定当前年份。

    ZoneId z = ZoneId.of( "Africa/Tunis" );
    Year year = Year.now( z );

您可以Map跟踪哪些月份将一周中的哪一天作为一周的第一天。EnumMap当使用枚举作为键时,我们使用它的极端效率。

    Map < DayOfWeek, AtomicInteger > map = new EnumMap <>( DayOfWeek.class );

循环一年中的所有月份。Month枚举定义了十几个对象,一年中的每个月一个。CallingMonth.values提供了所有这些月份的数组,按时间顺序排列。

对于月份数组中的每个月,获取该YearMonth月的 。然后获取该月的第一天,并询问结果LocalDate该日期是星期几。

使用那个星期几,那个DayOfWeek枚举对象,作为映射的键。查看该键是否存在条目。如果没有,请输入一个新的AtomicInteger设置为零。再次询问该DayOfWeek枚举对象是否作为我们映射中的键存在。我们知道第二个问题确实它必须在那里,所以不需要检查null. 我们将其中的计数加AtomicInteger一,以计算YearMonth我们循环的次数。

为什么AtomicInteger不用Integer上课?因为AtomicInteger可以递增,不像Integer是不可变的。

    for ( Month month : Month.values() )
    {
        YearMonth yearMonth = year.atMonth( month );
        DayOfWeek dow = yearMonth.atDay( 1 ).getDayOfWeek();
        System.out.println( "yearMonth: " + yearMonth + " = " + yearMonth.atDay( 1 ) + " = " + dow );
        map.putIfAbsent( dow , new AtomicInteger( 0 ) );
        map.get( dow ).incrementAndGet();
    }

转储到控制台。

    System.out.println( "map = " + map );

对于 2020 年,结果是:

yearMonth: 2020-01 = 2020-01-01 = WEDNESDAY
yearMonth: 2020-02 = 2020-02-01 = SATURDAY
yearMonth: 2020-03 = 2020-03-01 = SUNDAY
yearMonth: 2020-04 = 2020-04-01 = WEDNESDAY
yearMonth: 2020-05 = 2020-05-01 = FRIDAY
yearMonth: 2020-06 = 2020-06-01 = MONDAY
yearMonth: 2020-07 = 2020-07-01 = WEDNESDAY
yearMonth: 2020-08 = 2020-08-01 = SATURDAY
yearMonth: 2020-09 = 2020-09-01 = TUESDAY
yearMonth: 2020-10 = 2020-10-01 = THURSDAY
yearMonth: 2020-11 = 2020-11-01 = SUNDAY
yearMonth: 2020-12 = 2020-12-01 = TUESDAY
map = {MONDAY=1, TUESDAY=2, WEDNESDAY=3, THURSDAY=1, FRIDAY=1, SATURDAY=2, SUNDAY=2}
于 2020-07-15T02:06:16.647 回答
0

我会使用一个数组来保存值,遵循对您有意义的约定(星期一是元素 0 或星期日是元素 0)。在 Java 中,星期日通常存储为时间实用程序中的元素 0,因此您可以使用此约定来获取一周中某一天的整数索引,并在该索引作为日期参数的第一个出现时递增该索引。

下面的示例将让您开始使用代码来检查今天的日期是否是本月的第一天,如果是则递增数组。请注意,今天不是我在示例中使用的第一个。

import java.util.Arrays;
import java.time.LocalDate;

public class Test {
    //Check if day is the 1st of the month
    static boolean isFirstofMonth;
    private boolean isFirstDayofMonth() {
        LocalDate today = LocalDate.now();
        int dayOfMonth = today.getDayOfMonth();
        if(dayOfMonth == 1) {
            return isFirstofMonth = true;
        }
        else {
            return isFirstofMonth = false;
        }
    }

    public static void main(String[] args) {
        //Build ArrayList with values (NOTE int values default to 0)
        int[] Days = new int[7];
        LocalDate today = LocalDate.now();
        int val = today.getDayOfWeek().getValue();
        //Use today as argument
        Test t = new Test();
        t.isFirstDayofMonth();
        //Increment at the appropriate index in the array if it's the first
        if(t.isFirstDayofMonth()) {
            Days[val] += 1;
        }
        else {
            
        }
        System.out.println(Arrays.toString(Days));
        }
    }

不完全确定这是否是您要查找的内容,但如果您正在寻求使用不同的参数,您可以轻松地修改它。然后以您想要的格式打印,您可以执行以下操作:

String[] week = new String[] {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

for(int i = 0; i < week.length; i ++) {
    System.out.println(week(i) + ":" + Days(i)
}

鼓励您自己尝试一下!:)

于 2020-07-15T02:26:13.077 回答