java代码万年历 万年历java程序代码

JAVA万年历代码/*
题目:输出任意年份任意月份java代码万年历的日历表(公元后)
思路:
1.已知1年1月1日是星期日,1 % 7 = 1 对应java代码万年历的是星期日,2 % 7 = 2 对应java代码万年历的是星期一,以此类推;
2.计算当年以前所有天数 当年当月1号之前所有天数;
a.年份分平年闰年,平年365天,闰年366天;
b.闰年java代码万年历的判断方法year % 400 == 0 || (year % 100 != 0year % 4 == 0)若为真,则为闰年否则为平年;
c.定义平年/闰年数组,包含各月天数;
d.遍历数组求和,计算当年当月前总天数;
e.当年以前所有天数 当年当月前总天数 1即为1年1月1日到当年当月1日java代码万年历的总天数;
3.总天数对7取模,根据结果判断当月1号是星期几,输出空白区域;
4.输出当月日历表,逢星期六换行
*/
import java.util.Scanner;
class FindMonthList {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int year = sc.nextInt();//年份
if (year1) {//判断非法输入年份
System.out.println("输入错误!");
return;
}
System.out.println("请输入月份:");
int month = sc.nextInt();//月份
if (month1 || month12) {//判断非法输入月份
System.out.println("输入错误!");
return;
}
//输出表头
System.out.println("-------"year" 年 "month" 月 ""-------");
System.out.println();
System.out.println("日一二三四五六");
//计算当前年份以前所有天数beforeYearTotalDay;每4年一个闰年,闰年366天,平年365天
int beforeYearTotalDay = ((year - 1) / 4 * 366)(year-1 - ((year - 1) / 4)) * 365;
int[] arrLeapYear = {0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年各月天数int数组
int[] arrNormalYear = {0,31,28,31,30,31,30,31,31,30,31,30,31};//平年各月天数int数组
int beforeMonthTotalDay = 0;//定义本年当月之前月份的总天数
if (year % 400 == 0 || (year % 100 != 0year % 4 == 0)) {//判断当前年份是否是闰年
for (int i = 0 ; imonth ; i) {//for循环计算当月之前总天数
//计算当前月份之前的所有天数
beforeMonthTotalDay = beforeMonthTotalDayarrLeapYear[i];
}
//判断当月1日是星期几
int totalDay = beforeYearTotalDaybeforeMonthTotalDay1;
int week = totalDay % 7;//已知1年1月1日是星期日,即模7得1对应的是星期日
for (int i = 0 ; i(week - 17) % 7 ; i) {//如果写成i(week-1)会出现i-1的情况
System.out.print("");//输出开头空白
}
for (int i = 1 ;i = arrLeapYear[month] ;i) {//for循环输出各月天数
System.out.print(i"");
if (i10 ) {//小于10的数补一个空格,以便打印整齐
System.out.print(" ");
}
if (i % 7 == ((7-(week - 1)) % 7 ) || i == arrLeapYear[month]) {//每逢星期六/尾数换行
System.out.println();
}
}
} else {//不是闰年就是平年
for (int i = 0 ; imonth ; i) {//for循环计算出当月之前月份总天数
beforeMonthTotalDay = beforeMonthTotalDayarrNormalYear[i];
}
//判断当月1日是星期几
int totalDay = beforeYearTotalDaybeforeMonthTotalDay1;
int week = totalDay % 7;//已知1年1月1日是星期日,即模7得1对应的是星期日
for (int i = 0 ; i(week - 17) % 7 ; i) {//如果写成i(week-1)会出现i-1的情况
System.out.print("");//输出开头空白
}
for (int i = 1 ;i = arrNormalYear[month] ;i) {//for循环输出各月天数
System.out.print(i"");
if (i10 ) {//小于10的数补一个空格,以便打印整齐
System.out.print(" ");
}
if (i % 7 == ((7-(week - 1)) % 7 ) || i == arrNormalYear[month]) {//每逢星期六/尾数换行
System.out.println();
}
}
}
}
}
显示效果:
JAVA编写一个多功能万年历程序import java.text.SimpleDateFormat; import java.util.Calendar; public class TestDate {public static final String[] weeks = { "日", "一", "二", "三", "四", "五", "六" };public static void main(String[] args) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR,2011);//2011年 c.set(Calendar.MONTH,0);//java中Calendar类java代码万年历,月从0开始,0代表一月 c.set(Calendar.DATE,1);//1号 int day = c.get(Calendar.DAY_OF_WEEK);//获致是本周java代码万年历的第几天地, 1代表星期天...7代表星期六 System.out.println(new SimpleDateFormat( "yyyy-MM-dd ").format(c.getTime())); System.out.println("星期"weeks[day-1]); }}把以上测试代码写作一个方法 方法的参数名为年月日,即可 。当然Calendar 还有很多功能,比如一周的第几天,一年的第几个月……
java中,一段万年历代码,跑起来总是差4天,修改之后也只能让一部分月份的显示正确,代码如下我改造了一下你的代码 :
package com.mikuma.calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class Calendar{
public static void main(String[] args){
int year = 0;
int month = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您要查询的年份");
year = scanner.nextInt();
System.out.println("请输入您要查询的月份");
while (true){
month = scanner.nextInt();
if (month0 || month12){
System.out.println("月份输入有误,请重新输入");
}else{
break;
}
}
printPermanentCalendar(year, month);
}
/**
* 输出万年历
*
* @param year
* @param month
*/
private static void printPermanentCalendar(int year,int month){
int days = 0;
int totaldays = 0;//获取1990年至查询的年份的天数
for (int i = 1900; iyear; i){
totaldays = totaldays(isLeapYear(i) ? 366 : 365);
}
int beforedays = 0;//到指定月份的天数
for (int i = 1; i = month; i){
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
days = isLeapYear(year) ? 29 : 28;
break;
default:
break;
}
if (imonth){
beforedays = beforedaysdays;
}
}
totaldays = totaldaysbeforedays;//总计天数,以判断周几;
int weekDay = 0;
int temp = (1totaldays) % 7;
if (temp == 0){//1990年1月1日星期一 , 据此日0天星期一,以此类推
weekDay = 0;
}else{
weekDay = temp;
}
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for (int i = 0; iweekDay; i){
System.out.print("\t");
}
for (int i = 1; i = days; i){
System.out.print(i"\t");
if ((totaldaysi) % 7 == 6){
System.out.print("\n");
}
}
}
private static boolean isLeapYear(int year){
return new GregorianCalendar().isLeapYear(year);
}
}
运行:
对比了下 360日历:
结果正确
我们再测试下 2017 年 2月
对比360 日历
也是正确
【java代码万年历 万年历java程序代码】关于java代码万年历和万年历java程序代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读