我需要根据 MM-DD-YYYY 找到一周中的某一天(即星期一、星期二...)。所以基本上java日历会做什么,但不使用java日历。
最佳答案
虽然不常见,但可以根据日历日期计算出与星期几相对应的数字。
简而言之,您首先需要根据日历日期计算一个日期序列号,即自某个固定时间点(非正式地称为“纪元”)以来经过的连续天数。现代计算中最常见的串行日期方案是 Posix Time,其纪元日期为 UTC 时间 1970 年 1 月 1 日午夜。
您需要决定此计算所需的精度级别,例如。是否需要考虑儒略历(在 1584 年教皇格列高利进行公历改革之前欧洲大部分地区使用),是否需要修正世纪日等。
有多种算法可用于将日历日期算术转换为给定纪元的日期序列号。从历史上看,这些计算中最常用的纪元是儒略日数字系统(不要与儒略历混淆),该系统从公历中的公元前 4714 年 11 月 24 日开始计算天数。下面是 Java 代码,它实现了 Jean Meeus 在他的书“天文算法,第二版”中发布的一种此类算法。该算法计算儒略日数并假设天的长度正好是 86400 秒,考虑到一般公历改革,并考虑世纪和闰日:
public class JulianDay {
private static final int YEAR = 0;
private static final int MONTH = 1;
private static final int DAY = 2;
private static final int HOURS = 3;
private static final int MINUTES = 4;
private static final int SECONDS = 5;
private static final int MILLIS = 6;
:
:
// Converts a timestamp presented as an array of integers in the following
// order (from index 0 to 6): year,month,day,hours,minutes,seconds,millis
// month (1-12), day (1-28 or 29), hours (0-23), min/sec (0-59) to a
// Julian Day Number.
// For clarity and simplicity, the input values are assumed to be well-formed;
// error checking is not implemented in the snippet.
public static double toJD(int[] ymd_hms) {
int y = ymd_hms[YEAR];
int m = ymd_hms[MONTH];
double d = (double) ymd_hms[DAY];
d = d + ((ymd_hms[HOURS] / 24.0) +
(ymd_hms[MINUTES] / 1440.0) +
(ymd_hms[SECONDS] / 86400.0) +
(ymd_hms[MILLIS] / 86400000.0));
if (m == 1 || m == 2) {
y--;
m = m + 12;
}
double a = Math.floor(y / 100);
double b = 2 - a + Math.floor(a / 4);
return (Math.floor(365.25 * (y + 4716.0)) +
Math.floor(30.6001 * (m + 1)) +
d + b - 1524.5);
}
}
一旦获得了日期序列号,就可以直接根据日期号除以 7(一周中的天数)得到的余数计算出星期几。
关于java - 在 Java 中不使用日历函数查找星期几,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40332445/