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

标签 java android calendar local

我知道如何为标准公历执行此操作,但我想为我的社区使用本地日历。计划是为 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/

相关文章:

android - 如何在 RecyclerView 中正确显示网格?

java - 打印 POS/ESC Apex3 图像 S.O.S

java - 每天使用 ScheduledExecutorService 安排任务?

javascript - 使用moment的isoWeekday创建日期网格

java - 在 Android 应用程序中创建本地数据库

java - 在 Java 中开发功能强大的浏览器托管 UI 的选项有哪些?

java - 由 : java. lang.ClassCastException 引起 : com. google.appengine.api.datastore.Text 无法转换为 java.lang.String

java.nio.file.InvalidPathException : Illegal char <:> when using Paths. get()

java - android 的新手-将 xml 文档编译成二进制格式有什么好处

java - 如何设置字符串(HH :mm) to UTC time with current date and convert it to local time