gpt4 book ai didi

java - 在 java 中获取本地日历的一个月的第一天

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:28 25 4
gpt4 key购买 nike

我知道如何为标准公历执行此操作,但我想为我的社区使用本地日历。计划是为 Android 制作一个日历应用程序。

我有公历的这段代码,但无法弄清楚它背后的算法。

public static int day(int M, int D, int Y) {
int y = Y - (14 - M) / 12;
int x = y + y/4 - y/100 + y/400;
int m = M + 12 * ((14 - M) / 12) - 2;
int d = (D + x + (31*m)/12) % 7;
return d;
}

另外,请告诉我这是否是日历应用程序的正确步骤。如果您能提出任何技术建议,我将不胜感激。

如果您需要有关我的日历的更多详细信息,请留言,我会提供完整的详细信息。

最佳答案

我猜参数 M、D 和 Y 代表月、日、年。我还猜你是在谈论获取每月第一天的工作日,对吧?

我会使用来自 Java SECalendar 类的内置日历功能.

这可能看起来像:

...
Calendar localCalendar = Calendar.getInstance();
localCalendar.set(Calendar.MONTH, Calendar.AUGUST);
localCalendar.set(Calendar.DAY_OF_MONTH, 1);
int dayOfWeek = localCalendar.get(Calendar.get(DAY_OF_WEEK));
...

当然,您可以先设置其他字段,具体取决于您的需要。

编辑(关于日历的自定义类型):

如果您的日历中没有闰年,您可以声明具有月份长度的常量数组。然后您可以使用模运算符手动添加您的工作日,如下所示:

int WEEKDAY_OF_FIRST_DAY_IN_FIRST_YEAR = 3; // 0 for monday, 1 for tuesday, etc.
int LENGTH_OF_WEEK = 7;
int DAYS_IN_YEAR = 365; // 31 + 32 + 31 + 32 + 31 + 30 + 30 + 30 + 29 + 29 + 30 + 30
int DAYS_OF_MONTHS[] = { 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30 };

public static int day(int M, int D, int Y) {
int firstDayInCurrentYear = WEEKDAY_OF_FIRST_DAY_IN_FIRST_YEAR +
(Y * DAYS_IN_YEAR) % LENGTH_OF_WEEK;
int firstDayOfMonth = firstDayInCurrentYear;

for (int month = 0; month < M; month++) {
firstDayOfMonth =
(firstDayOfMonth + DAYS_OF_MONTH[month]) % LENGTH_OF_WEEK;
}

return firstDayOfMonth;
}

附加提示:

这只适用于日历系统中没有闰年的情况!

编辑:

用实数替换年长度的样本数和月份长度的省略号

编辑:

添加了第一年第一天的常量 (1/1/0)。

关于java - 在 java 中获取本地日历的一个月的第一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32163996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com