Java万年历,输入年月获取改年月日历表

  1 //输入年份和月份,打印出这个月的日历表
  2 /*
  3     1.1900年1月1日是星期一
  4     2.计算输入的年份距离1900年有多少天再计算当年1月1日距这个月有多少天
  5         1)
  6     3.总天数%7得出从星期几开始
  7     注:计算机中的时间最小到1900年,此外UNIX系统认为1970年1月1日0点是时间纪元。
  8     so,在本程序中不考了1900年以前的年份了。有兴趣的可以自己研究下。
  9 */
 10 import java.util.Scanner;
 11 class Calender{
 12
 13     public static void main(String[] args){
 14
 15         print();
 16
 17     }
 18
 19     //打印输出
 20     public static void print(){
 21         Scanner sc = new Scanner(System.in);
 22         System.out.println("请输入年份:");
 23         int year = sc.nextInt();
 24         System.out.println("请输入月份(1~12):");
 25         int month = sc.nextInt();
 26
 27         int days = getDays(year, month);//getDays方法详细请往下看
 28         //days+1:day是总天数,输入月份的总天数只是这个月之前的天数,
 29         //加上1变为这个月开始的第一天
 30         int week = days%7==0?1:days%7+1;//开始的第一天是星期几
 31         System.out.println("日\t一\t二\t三\t四\t五\t六");
 32
 33         //输出第一行(第一个星期)空出来部分
 34         for(int i=1; i<=week; i++){
 35             System.out.print(" \t");
 36         }
 37
 38         //输出第一行(第一个星期)各天
 39         for(int i=1; i<=7-week; i++){
 40             System.out.print(i+"\t");
 41         }
 42
 43         System.out.println();
 44
 45         //1~12月的个月天数
 46         int monthDay = 0;
 47         switch(month){
 48                 case 2:
 49                     if(year%4==0&&year%100!=0 || year%400==0 ){
 50                         monthDay=29;
 51                     }else{
 52                         monthDay=28;
 53                     }
 54                     break;
 55
 56                 case 4:
 57                 case 6:
 58                 case 9:
 59                 case 11:
 60                     monthDay=30;
 61                     break;
 62
 63                 default :
 64                     monthDay=31;
 65                     break;
 66             }
 67
 68         //输出剩下的日期,从第二周开始了,所以是8-week
 69         for(int i=8-week; i<=monthDay; i++){
 70
 71             System.out.print(i+"\t");
 72
 73             //每七天换一行则当日期能整除7就换行
 74             if((i+week)%7==0){
 75                 System.out.println();
 76             }
 77         }
 78
 79
 80     }
 81
 82     /*
 83         计算当年当月的距1900年1.1的总天数
 84     */
 85     public static int getDays(int year, int month){
 86         //判断这年是闰年或者平年,得到年的总天数
 87         int day1=0, day2=0;
 88
 89         for(int i=1900; i<year; i++){
 90             if(i%4==0&&i%100!=0 || i%400==0){
 91                 day1+=366;
 92             }else{
 93                 day1+=365;
 94             }
 95         }
 96
 97         //得到月的总天数
 98         for(int i=1; i<month; i++){
 99             switch(i){
100                 case 2:
101                     if(year%4==0&&year%100!=0 || year%400==0 ){
102                         day2+=29;
103                     }else{
104                         day2+=28;
105                     }
106                     break;
107
108                 case 4:
109                 case 6:
110                 case 9:
111                 case 11:
112                     day2+=30;
113                     break;
114
115                 default :
116                     day2+=31;
117                     break;
118             }
119         }
120
121         return day1+day2;
122
123     }
124
125 }
时间: 2024-11-10 10:28:34

Java万年历,输入年月获取改年月日历表的相关文章

Java 字符终端上获取输入三种方式

http://blog.csdn.net/hongweigg/article/details/14448731 在Java 字符终端上获取输入有三种方式: 1.java.lang.System.in (目前JDK版本均支持) 2.java.util.Scanner (JDK版本>=1.5) 3.java.io.Console(JDK版本>=1.6),特色:能不回显密码字符 package com.srie.chapter01; import java.io.BufferedReader; im

【Java】输入与输出与JDK1.5之后的新型字符串StringBuilder

输入与输出在Java里面相当基础,在Java各大书籍里面讲了又讲,但上面的概念往往讲得非常复杂,Java的老师强调学生必须透彻地弄得每一个类.每一个方法的意义,实际上,我们仅仅关注的是如何达到一个简单的输入输出效果.在网络上一个小小的Java输入输出包罗万象,主要是在JDK1.5推出了新型的Scanner输入,而以往的BufferedReader同样可以完成输入操作,也许多有经验的老手把自己使用惯的一套放上网络,根本不告诉别人怎么修改.下面举例子,彻底地说明白Java的输入输出,包括控制台,包括

java控制台输入Scanner、InputStreamReader、Console说明

java控制台输入 (2009-12-08 11:13:28) 转载▼ 标签: 杂谈 分类: corejava 0 引言从控制台中读取数据是一个比较常用的功能,在 JDK 5.0 以前的版本中的实现是比较复杂的,需要手工处理系统的输入流.有意思的是,从 JDK 5.0 版本开始,能从控制台中输入数据的方法每增加一个版本号,就有一种新增的方法,这也增加了选择的种类,可以依据不同的要求来进行选择.下面来看一下,各个版本中如何从控制台中读取数据以及各自的优缺点. 1 JDK 1.4 及以下版本读取的方

Java基础——输入/输出(一)

概述 Java的IO通过java.io包下是类和接口来支持,在java.io包下主要包括输入,输出两种IO流,每种输入.输出流又可分为字节流和字符流两大类.其中字节流以字节为单位来处理输入.输出操作,而字符流以字符来处理来处理输入.输出操作. 一.File类 File类可以使用文件路径字符串来创建File实例,该文件字符串可以是绝对路径,也可以是相对路径.在默认情况下,系统总是依据用户的工作路径来解释相对路径,这个路径由系统属性“userdir”指定. 一旦创建了File对象后,就可以调用Fil

java 通过System.getProperties()获取系统参数

1.java的System.getProperty()方法可以获取的值 java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装目录 java.vm.specification.version Java 虚拟机规范版本 java.vm.specification.vendor Java 虚拟机规范供应商 java.vm.specification.name

Java的输入和输出

一.Java的输入 方法一:从控制台接收一个字符,然后将其打印出来 import java.io.*; public static void main(String [] args) throws IOException{ System.out.print("Enter a Char:"); char i = (char) System.in.read(); System.out.println("your char is :"+i); } 虽然此方式实现了从键盘获

Java Class类以及获取Class实例的三种方式

T - 由此 Class 对象建模的类的类型.例如,String.class 的类型是Class<String>.如果将被建模的类未知,则使用Class<?>. [java] view plain copy print? public final class Class<T> extends Object  implements java.io.Serializable, java.lang.reflect.GenericDeclaration, java.lang.r

JAVA之IO技术-获取指定目录下的文件夹和文件的File对象或是字符串名称。

package ioTest.io3; /* * 获取指定目录下的文件夹和文件的File对象或是字符串名称. * 也可以通过filter获取指定的文件夹或者指定类型的文件 * 这里面需要做一个总结,如何利用jdk的源码去理解不熟悉的方法的应用. */ import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; public class FileDemo2 { public static void m

JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件

package ioTest.io3; import java.io.File; /* * 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件 . * 并将文件夹和文件名称打印在控制台上面.并且要显示文件目录的层级 * 注:运用了递归的算法. */ public class FileDemo3 { public static void main(String[] args) { File dir=new File("F:\\黑马学习日程\\"); //File dir=new Fi