一,Java实现万年历的代码:

package calendar;

import java.util.Scanner;//日历项目

public class RiLi{

public static void main(String[] args){

Scanner A=new Scanner(System.in);

System.out.println("请输入年份:");

int year=A.nextInt();

System.out.println("请输入月份:");

int month=A.nextInt();

int sum=0;

for(int i=1900;i

if(i%4==0&&i%100!=0||i%400==0){

sum=sum+366;

}else{

sum=sum+365;

}

}

for(int i=1;i

if(i==2){

if(year%4==0&&year%100!=0||year%400==0){

sum=sum+29;}

else{

sum=sum+28;

}

}else{

if(i==4||i==6||i==9||i==11){

sum+=30;

}else{

sum+=31;

}

}

}

sum=sum+1;

int wekday=sum%7;

System.out.println("日\t一\t二\t三\t四\t五\t六");

for(int i=1;i<=wekday;i++){

System.out.print("\t");

}

int f=0;

if(month==4||month==6||month==9||month==11){

f=30;}

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){f=31;}

if(month==2){

if(year%4==0&&year%100!=0||year%400==0){f=29;}

else{f=28;}

}

for(int i=1;i<=f;i++){

if(sum%7==6){

System.out.print(i+"\n");

}else{

System.out.print(i+"\t");

}

sum++;

}

}

}

二.一个Java万年历,比较简单的那种,显示年月日、星期几、当前日期是第几周、显示闰年、打印万年历等,还可显示当前日期是一年中的第几天,指定日期是星期几等,采用了基姆拉尔森计算公式 ,W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 ,在公式中d表示日期中的日数,m表示月份数,y表示年数。注意:在公式中有个与其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

public class myCalendar {

//以下程序段是用来计算输入日期为该年的第几天的

public static int cptDay(int year , int month , int day){

byte dayadd[]={1,-2,1,0,1,0,1,1,0,1,0,1}; //用来存储每个月天数和30的差值

int daycount = 0; //这是天数daycount计数器,初始化为0

for(int i=0; i

daycount+=(30+dayadd[i]);

daycount+=day;

return (month>2)?daycount+isLeap(year):daycount;

}

//闰年判定程序段,闰年返回1,平年返回0

public static int isLeap(int year){

if((year%400==0)||((year%4==0)&&(year%100!=0)))

return 1;

return 0;

}

//计算输入日期是星期几

//采用了基姆拉尔森计算公式

//W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7

//在公式中d表示日期中的日数,m表示月份数,y表示年数。

//注意:在公式中有个与其他公式不同的地方:

//把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

public static int getWeek(int year,int month,int day){

if(month<3)

{ month+=12; year--;}

return (day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;

}

//以下程序段是来计算输入日期为该年第几周的

public static int weekCount(int year,int month,int day){

int dayCnt = cptDay(year,month,day);

int weekminus = getWeek(year,month,day)-getWeek(year,1,1);

int weekCnt = 0;

if(dayCnt%7==0) weekCnt = dayCnt/7+((weekminus>0)?1:0);

else weekCnt = dayCnt/7+((weekminus>0)?2:1);

return weekCnt;

}

//打印万年历

public static void printCal(int year){

byte dayadd[]={0,1,-2,1,0,1,0,1,1,0,1,0,1}; //同样的,每月天数和30的差值,注意,dadadd[0]的0并没用到

int wkpoint = getWeek(year,1,1); //wkpoint用来指出当前日期的星期数

int t = 0; //t用来作为一个标记器,解决闰年2月有29天的问题

int bk = 0; //bk用来记录需输空白的数目

String week[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};

for(int i=1;i<13;i++)

{

t = 0;

bk = 0;

if((i==2)&&(isLeap(year)==1))

t = 1; //当且仅当闰年的2月份才将其置为1

System.out.println("\n\n\t\t"+year+" 年 "+i+" 月\n");

for(int j=0;j<7;j++)

System.out.print(week[j]+"\t");

System.out.println();

while(bk++

System.out.print('\t');

for(int j=1;j<=(30+dayadd[i]+t);j++)

{

System.out.print(j+"\t"); //循环输出每月日期

if(wkpoint==6)

{ wkpoint = 0; System.out.print('\n');} //当wkpoint计数器为6时将其置为0,并换行

else

wkpoint++;

}

}

}

public static void main(String[] args){

String week[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};

System.out.println("输入的日期是该年的第"+cptDay(2009,2,15)+"天");

System.out.println("这一天是该年的第"+weekCount(2009,2,15)+"周 "+week[getWeek(2009,2,15)]);

printCal(2009);

}

}

三、

1.用户输入信息-->进行信息判断(是否符合要求)

2.以1900年1月1日(星期一)为基准,计算1900年1月1日至当日的总天数

(1)先计算1900年至(用户输入的年 - 1)的总天数   -->注意平闰年之分

(2)计算用户输入年份的1月至(用户输入月份 - 1)的天数

3.计算输入月份的第一天是星期几

4.格式化输出

以下我们按照步骤一步一步进行代码解析

一)、利用do-while循环接受用户输入信息,并利用if-else语句进行判断

int year;

int month;

boolean xn = false;

do

{

System.out.println("请输入年份:");

year = input.nextInt();

System.out.println("请输入月份:");

month = input.nextInt();

//利用boolean类型的表达式进行输入信息的判断

xn = (month < 1) || (month > 12) ||(year < 1);

if(xn)

{

System.out.println("输入信息错误,请重新输入!");

}

}while(xn);

二)、判断平闰年,并计算1900年至(用户输入年 - 1)的总天数

int everyYearDay = 0; //每年的天数

int totalYearsDays = 0; //计算年的天数

int inputYearDay = 0 //记录用户输入年的天数

boolean yn = false; //标识平闰年

//利用for循环计算天数

for(int i = 1900;i < =year;i ++)

{

if(((i % 4 == 0)&&(i % 100 != 0))||(i % 400 == 0)) //闰年的判断条件

{

yn = true;

everyYearDay = 366;

}

else

{

yn = false;

everyYearDay = 365;

}

//如果循环中的年份小于用户输入的年份,则累积天数

if(i < year)

{

totalYearsDays = totalYearsDays + everyYearDay;

}

else

{

inputYearDay = everyYearDay;

System.out.println(year + "年共有:" + inputYearDay + "天");

}

}

三)、判断月份的天数,并计算当年1月至(用户输入月份 -1)的天数

int everyMonthDay = 0; //记录每月的天数

int totalMonthsDays = 0; //总天数

int inputMonthDay = 0; //记录用户输入的月份在用户输入年份的天数

//利用for循环计算天数

for(int i = 1;i <= month;i ++)

{

switch(i)

{

case 4:

case 6:

case 9:

case 11:

everyMonthDay = 30;

break;

case 2:

if(xn) //xn是用来记录平闰年的boolean类型的变量

{

everyMonthDay = 29;

}

else

{

everyMonthDay = 28;

}

break;

default:

everyMonthDay = 31;

break;

}

if(i < month)

{

totalMonthsDays = totalMonthsDays + everyMonthDay;

}

else

{

inputMonthDay = everyMonthDay;

System.out.println(month + "月共有:" + inputMonthDay + "天");

}

}

四)、计算总天数,并计算出用户输入的月份的第一天星期几

int total = totalMonthsDays + totalYearsDays; //计算总天数

int temp = (total + 1) % 7; //判断输入月份的第一天星期几

五)、格式化输出

//因为我们的输入格式是

//星期日 星期一 星期二 星期三 星期四 星期五 星期六

//当星期日时的时候,我们直接输出就好了,但是当

//第一天是星期一的时候,我们就必须首先打印出空格

//然后再输出日期,才能让号码和星期想对应

//打印空格

for(int spaceno = 0;spaceno < temp;spaceno ++)

{

System.out.print("/t");

}

//按照顺序打印号码

for(int i = 1;i <= inputMonthDay;i ++)

{

if((total + i ) % 7) //判断是否该换行了

{

System.out.println(i );

}

else

{

System.out.print(i + "/t");

}

}

四、 java(用calendar类)写一个万年历,输入年并且显示当年的日历

public class MyCalendar {

public static void main(String args[]) {

Scanner sc = new Scanner(System.in);

Calendar c = Calendar.getInstance();

System.out.println("请输入数字年:(比如 2014)");

int year = sc.nextInt();

sc.close();

// int year = 2014;

c.set(Calendar.YEAR,year);

for (int i = 0; i < 12; i++) {

c.set(Calendar.MONTH,i); //

c.set(Calendar.DATE,1); //设置成1月

printMonth(c);

}

}

public static void printMonth(Calendar c){

c.set(Calendar.DAY_OF_MONTH,1); //设置成一日

System.out.printf("\n\n========= %s 月 =========\n",c.get(Calendar.MONTH)+1);

String[] weeks = { "日", "一" , "二", "三", "四", "五", "六" };

for (int i = 0; i < weeks.length; i++) {

System.out.printf("%s" + (i != 6 ?"\t":"\n"),weeks[i]);

}

int offday = c.get(Calendar.DAY_OF_WEEK) - 1;

for(int i = 0; i < offday; i++){

System.out.printf("\t");

}

int month = c.get(Calendar.MONTH);

while(c.get(Calendar.MONTH) == month ){

System.out.printf("%d" + ( (c.get(Calendar.DAY_OF_WEEK)) != 7 ? "\t":"\n") ,c.get(Calendar.DAY_OF_MONTH));

c.add(Calendar.DAY_OF_MONTH, 1);

}

}

}

五、程序:万年历+时钟小程序实现

java知识点有:java常用内库与工具(Date类、Calendar类等)、异常(try.....catch)、线程、AWT图形用户界面等基础知识点。

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.text.*;

import java.util.*;

//创建窗口和年历

class MainFrame extends JFrame{

JPanel panel=new JPanel(new BorderLayout());//BorderLayout为边界布局

JPanel panel1=new JPanel();

JPanel panel2=new JPanel(new GridLayout(7,7));//GridLayout为网格布局

JPanel panel3=new JPanel();

JLabel []label=new JLabel[49];

JLabel y_label=new JLabel("年份");

JLabel m_label=new JLabel("月份");

JComboBox com1=new JComboBox();

JComboBox com2=new JComboBox();

JButton button=new JButton("查看");

int re_year,re_month;

int x_size,y_size;

String year_num;

Calendar now=Calendar.getInstance(); //实例化Calendar

MainFrame(){

super("万年历-Jackbase");

setSize(300,350);

x_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth());

y_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight());

setLocation((x_size-300)/2,(y_size-350)/2);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel1.add(y_label);

panel1.add(com1);

panel1.add(m_label);

panel1.add(com2);

panel1.add(button);

for(int i=0;i<49;i++){

label=new JLabel("",JLabel.CENTER);//将显示的字符设置为居中

panel2.add(label);

}

panel3.add(new Clock(this));

panel.add(panel1,BorderLayout.NORTH);

panel.add(panel2,BorderLayout.CENTER);

panel.add(panel3,BorderLayout.SOUTH);

panel.setBackground(Color.white);

panel1.setBackground(Color.white);

panel2.setBackground(Color.white);

panel3.setBackground(Color.white);

Init();

button.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

int c_year,c_month,c_week;

c_year=Integer.parseInt(com1.getSelectedItem().toString()); //得到当前所选年份

c_month=Integer.parseInt(com2.getSelectedItem().toString())-1; //得到当前月份,并减1,计算机中的月为0-11

c_week=use(c_year,c_month); //调用函数use,得到星期几

Resetday(c_week,c_year,c_month); //调用函数Resetday

}});

setContentPane(panel);

setVisible(true);

setResizable(false);

}

public void Init(){

int year,month_num,first_day_num;

String log[]={"日","一","二","三","四","五","六"};

for(int i=0;i<7;i++){

label.setText(log);

}

for(int i=0;i<49;i=i+7){

label.setForeground(Color.red); //将星期日的日期设置为红色

}

for(int i=6;i<49;i=i+7){

label.setForeground(Color.red);//将星期六的日期也设置为红色

}

for(int i=1;i<10000;i++){

com1.addItem(""+i);

}

for(int i=1;i<13;i++){

com2.addItem(""+i);

}

month_num=(int)(now.get(Calendar.MONTH)); //得到当前时间的月份

year=(int)(now.get(Calendar.YEAR)); //得到当前时间的年份

com1.setSelectedIndex(year-1); //设置下拉列表显示为当前年

com2.setSelectedIndex(month_num); //设置下拉列表显示为当前月

first_day_num=use(year,month_num);

Resetday(first_day_num,year,month_num);

}

public int use(int reyear,int remonth){

int week_num;

now.set(reyear,remonth,1); //设置时间为所要查询的年月的第一天

week_num= (int)(now.get(Calendar.DAY_OF_WEEK));//得到第一天的星期

return week_num;

}

public void Resetday(int week_log,int year_log,int month_log){

int month_score_log; //判断是否是闰年的标记

int month_day_score; //存储月份的天数

int count;

month_score_log=0;

month_day_score=0;

count=1;

if(year_log%4==0&&year_log%100!=0||year_log%400==0){//判断是否为闰年

month_score_log=1;

}

month_log=month_log+1; //将传来的月份数加1

switch(month_log){

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

month_day_score=31;

break;

case 4:

case 6:

case 9:

case 11:

month_day_score=30;

break;

case 2:

if(month_score_log==1){

month_day_score=29;

}

else{

month_day_score=28;

}

break;

}

for(int i=7;i<49;i++){ //初始化标签

label.setText("");

}

week_log=week_log+6; //将星期数加6,使显示正确

month_day_score=month_day_score+week_log;

for(int i=week_log;i

label.setText(count+"");

}

}

}

//创建时钟

class Clock extends Canvas implements Runnable{

MainFrame mf;

Thread t;

String time;

Clock(MainFrame mf){

this.mf=mf;

setSize(400,40);

setBackground(Color.white);

t=new Thread(this); //实例化线程

t.start(); //调用线程

}

public void run(){

while(true){

try{

t.sleep(1000); //休眠1秒钟

}catch(InterruptedException e){

System.out.println("异常");

}

this.repaint(100);

}

}

public void paint(Graphics g){

Font f=new Font("宋体",Font.BOLD,16);

SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss");//格式化时间显示类型

Calendar now=Calendar.getInstance();

time=SDF.format(now.getTime()); //得到当前日期和时间

g.setFont(f);

g.setColor(Color.red);

g.drawString(time,100,25);

}

}

public class Wnl{

public static void main(String [] args){

JFrame.setDefaultLookAndFeelDecorated(true);

MainFrame start=new MainFrame();

}

}

以上就是Java 实现万年历的资料,希望能帮助实现该功能的朋友,谢谢大家对本站的支持!

java写万年历_Java 实现万年历总结相关推荐

  1. java 简单万年历_java简单万年历

    Java万年历源代码_幼儿读物_幼儿教育_教育专区.. import java.awt.*; import java.awt.event.*; import javax.swing.*; import ...

  2. java设计万年历_java实现万年历

    package 类的部分总结; import java.text.DateFormat; //这是一些列方法所需要的包 import java.text.ParseException; import ...

  3. java写花束_Java作业 题目:16版.情人节送玫瑰花

    1.实验要求 本实验要求:以情人节送花为业务背景,体验自定义异常以及异常处理机制. 1-1. 业务说明: 1-1.1. 本实验以情人节送花为业务背景,女方提出送花需求,男方送出鲜花. 1-1.2. 当 ...

  4. java写病毒_java编写小病毒程序

    import java.io.File;//在你的桌面上创建无数个文件夹或文件,那电脑内存消耗很大了!import java.util.*;public class chuangjianwenjian ...

  5. 实验楼Java写计算器_Java版图形界面计算器

    Java 版图形界面计算器 实验说明及介绍 环境登录 无需密码自动登录,系统用户名 shiyanlou,密码 shiyanlou 环境介绍 本实验环境采用带桌面的 Ubuntu Linux 环境,实验 ...

  6. java写龟兔赛跑_Java实现龟兔赛跑

    闲极无聊,加上翻手机看到龟兔赛跑的词语,想到了可以通过java起两个线程来实现龟兔赛跑的实现. 代码实现其实很简单: 首先是乌龟类: 然后是兔子类: 最后是赛跑类: 接下里让我们看一下输出结果吧: 乌 ...

  7. java写值日表_Java知识之JVM

    类加载器 类装载器ClassLaoder负责加载class文件,class文件开头有特定的文件标识,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构,并且ClassL ...

  8. java写下雪_Java实现下雪场景

    1.[代码]Java实现下雪场景 import javax.swing.JFrame; /** * 首先我们来创建JFrame类,这个类我们把它称作MyStarFrame, * 包含一个主方法跟两个成 ...

  9. Java写析构函数_Java是否有析构函数?

    Java是否有析构函数? 我似乎无法在此找到任何文档. 如果没有,我怎么能达到同样的效果? 为了使我的问题更具体,我正在编写一个处理数据的应用程序,规范中说应该有一个"重置"按钮, ...

  10. java写界面_java能不能直接做界面窗口

    展开全部 可以的,一个简单32313133353236313431303231363533e78988e69d8331333337626135的界面public test_03(){ init(); ...

最新文章

  1. 微信小程序与H5相互跳转和传递数据
  2. 飘逸的python - 命令行漂亮的显示json数据
  3. Sybase数据库技术,数据库恢复---分享Sybase数据库知识(博客文章索引@51cto)
  4. 查询记录rs.previous()使用
  5. SPSS 26 资源及安装教程
  6. matlab判断传递函数的稳定性,基于Matlab的控制系统稳定性判定.pdf
  7. sql2000 mysql_sql2000迷你版 超精简版SQL Server 2000数据库下载
  8. 2022年上半年软件设计师下午真题试题(案例分析)及答案
  9. 浩方 VS 真三国无双 全图
  10. 代码随想录第十天 LeetCode 232、225(栈,队列)
  11. 编程题走迷宫_编程题——机器人走迷宫 (用C语言)
  12. 跟NAS斗智斗勇的个人文件整理日常(没写完)
  13. JS-变量提升与暂时性死区概念
  14. Android 8.1 DisplayPowerController(四) 自动调节亮度(1)——流程
  15. 基于OAuth2的认证
  16. yum -y insytall nmap报错:​​​​​​​​已加载插件:fastestmirrorLoading mirror speeds from cached hostfile
  17. IPM逆透视变换问题(1):Vanish Point
  18. JTAG unlock
  19. shell中的Random随机数
  20. 中国休闲食品行业发展现状及前景分析,市场集中度低「图」

热门文章

  1. 升职加薪,必不可少!Python刷题打怪,你要的LeetCode答案都在这里了!
  2. 城市智能公交管理系统方案
  3. SSM常用面试题整理一
  4. linux常用运行库,软件常用运行库-软件常用运行库scku下载 v3.1.0.0官方版--pc6下载站...
  5. 西南科技大学OJ题 最简单的C程序0612
  6. 黑马程序员_Java基础(环境搭建、进制转换、运算符)
  7. GAN:两者分布不重合JS散度为log2的数学证明
  8. 不用花钱,不用公网ip,用zerotier直接外网高速访问群晖,理论黑群晖白群晖都可以
  9. 华为ensp 交换机vlan配置
  10. PBRT-V3体渲染笔记