22. september 2005 - 14:56
#1
java har indbygget funktionalitet til at finde ugedag, men jeg antager at det skal
kodes selv
til inspiration fra lageret:
import java.util.*;
public class WeekDay {
private static final String[] dayname = {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday" };
// The java way
public static String wd1(int y, int m, int d) {
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, y);
c.set(Calendar.MONTH, m-1);
c.set(Calendar.DAY_OF_MONTH, d);
return dayname[c.get(Calendar.DAY_OF_WEEK) - 1];
}
// The elegant way
public static String wd2(int y, int m, int d) {
int a = (14 - m) / 12;
int yx = y - a;
int mx = m + 12*a - 2;
int daynum = (d + yx + yx/4 - yx/100 + yx/400 +31*mx/12) % 7;
return dayname[daynum];
}
// The straigth forward way
private static boolean isLeapYear(int y) {
return ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0));
}
private static final int[][] month = { {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334},
{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335} };
public static String wd3(int y, int m, int d) {
int daynum = 0;
daynum += ((y-1) * 365 + (y-1)/4 - (y-1)/100 + (y-1)/400); // years
daynum += month[isLeapYear(y)?1:0][m-1]; // months
daynum += (d - 1); // days
daynum = (daynum + 1) % 7; // first day of week = monday
return dayname[daynum];
}
private static void test(int y, int m, int d) {
System.out.println(wd1(y, m, d) + " " + wd2(y, m, d) + " " + wd3(y, m, d));
}
public static void main(String[] args) {
test(2003, 12, 4);
test(2003, 12, 24);
test(2004, 12, 8);
test(2000, 12, 31);
test(1900, 1, 1);
for(int y = 1800; y <= 2100; y++) {
for(int m = 1; m <= 12; m++ ) {
for(int d = 1; d <= 28; d++) {
if(wd1(y, m, d) != wd2(y, m, d)) {
System.out.println("problem wd2 : " + d + "-" + m + "-" + y);
}
if(wd1(y, m, d) != wd3(y, m, d)) {
System.out.println("problem wd3 : " + d + "-" + m + "-" + y);
}
}
}
}
}
}