import java.util.Date;
import java.util.Scanner;
public class calend{
?//初始化一个年份
?private static int Year;
?//初始化一个月份
?private static int Month;
?//初始化一个天数
?private static int Day;
?//初始化一个标识符
?private static boolean flage = true;
?public static void main(String[] args) {
??System.out.println("**********欢迎使用简易日历*********");
??while(flage){
???//打印菜单
???printMenu();
???//正则验证输入的选项
???String cmd = getString();
???//调用正则的方法,判断是否合法
???int temp = validateSelect(cmd);
???if(temp==-1){
????System.out.println("输入不合法,请从新输入!");
????continue;
???}if(temp==0){
????System.out.println("系统退出!");
????break;
???}
???switch (temp) {
???case 1:
????/**
???? * 打印当前的日历,调用一个打印当前日历的方法
???? */
????printNow();
????break;
???case 2:
????/**
???? * 打印自定义的日历,调用一个自定义的方法
???? */
????printDefine();
????break;
???default:
????break;
???}
??}
?}
?//打印当前日历的方法
?@SuppressWarnings("deprecation")
?public static void printNow(){
??int sum1=0;
??Date date=new Date();//日期构造器
??int nowYear=date.getYear()+1900;//当前年份
??int nowMonth=date.getMonth()+1;//当前月份
??int nowDay=date.getDate();//当前天数
??/**
?? * 测试打印的日期
?? */
??//??System.out.println("当前的年份"+nowYear);
??//??System.out.println("当前的月份"+nowMonth);
??//??System.out.println("当前的天数"+nowDay);
??for (int i = 1900; i <nowYear; i++) {
???if(i%4==0&&i%100!=0||i%400==0){
????sum1+=366;
???}else{
????sum1+=365;
???}
??}
??for (int i = 1; i <nowMonth; i++) {
???if(i==2){
????if(nowYear%4==0&&nowYear%100!=0||nowYear%400==0){
?????sum1+=29;
????}else{
?????sum1+=28;
????}
???}else if(i==4||i==6||i==9||i==11){
????sum1+=30;
???}else if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
????sum1+=31;
???}
??}
??sum1++;//计算总的天数
??int weekday=sum1%7;
??System.out.println("日\t一\t二\t三\t四\t五\t六");
??for(int i=0;i<weekday;i++){
???System.out.print("\t");
??}int printday=0;
??if(nowMonth==2){
???if(nowYear%4==0&&nowYear%100!=0||nowYear%400==0){
????printday=29;
???}else{
????printday=28;
???}
??}else if(nowMonth==4||nowMonth==6||nowMonth==9||nowMonth==11){
???printday=30;
??}else if(nowMonth==1||nowMonth==3||nowMonth==5||nowMonth==7||nowMonth==8||nowMonth==10||nowMonth==12){
???printday=31;
??}
??//指定一个标识符
??boolean flag = false;
??for (int i = 1; i <=printday; i++) {
???if(sum1%7==6){
????if(i==nowDay){
?????flag = true;
?????System.out.print("["+i+"]"+"\n");
????}else{
?????System.out.print(i+"\n");
????}
???}else{
????if(i==nowDay){
?????flag = true;
?????System.out.print("["+i+"]"+"\t");
????}else{
?????System.out.print(i+"\t");
????}
???}
???sum1++;
??}
??System.out.println();
??if(!flag){
???System.out.println("当前月没有这一天,无法标记");
??}
??System.out.println("是否继续?(Y/N)");
??if("Y".equalsIgnoreCase(getString())){
??}else{
???flage = false;
???System.out.println("谢谢使用,系统退出");
??}
?}
?//打印自定义日历的方法
?public static void printDefine(){
??//定义一个天数的总数
??int sum = 0;
??/**
?? * 年份判断的方法
?? */
??while(true){
???System.out.println("请输入年份:");
???String tempYear = getString();
???int year = validateYear(tempYear);
???if(year==-1){
????System.out.println("输入的年份不合法,请从新输入");
????continue;
???}else{
????Year = Integer.parseInt(tempYear);
????break;
???}
??}
??/**
?? * 月份判断的方法
?? */
??while(true){
???System.out.println("请输入月份:");
???String tempMonth = getString();
???int month = validateMonth(tempMonth);
???if(month==-1){
????System.out.println("输入的月份不合法,请从新输入");
????continue;
???}else{
????Month = Integer.parseInt(tempMonth);
????break;
???}
??}
??/**
?? * 天数判断的方法
?? */
??while(true){
???System.out.println("请输入天数:");
???String tempDay = getString();
???int day = validateDay(tempDay);
???if(day==-1){
????System.out.println("输入的天数不合法,请从新输入");
????continue;
???}else{
????Day = Integer.parseInt(tempDay);
????break;
???}
??}
??/**
?? * for循环计算年份
?? */
??for(int i=1900;i<Year;i++){
???if(i%4==0&&i%100!=0||i%400==0){
????sum+=366;
???}else{
????sum+=365;
???}
??}
??/**
?? * for循环计算月份
?? */
??for(int i=1;i<Month;i++){
???if(i==2){
????if(Year%4==0&&Year%100!=0||Year%400==0){
?????sum+=29;
????}else{
?????sum+=28;
????}
???}else if(i==4||i==6||i==9||i==11){
????sum+=30;
???}else{
????sum+=31;
???}
??}
??//计算总数,算出这个月的第一天是什么位置
??sum++;
??System.out.println("日\t一\t二\t三\t四\t五\t六");
??int weekDay = sum%7;
??for(int i=0;i<weekDay;i++){
???System.out.print("\t");
??}
??/**
?? * 每个月的天数
?? *
?? */
??int printday=0;
??if(Month==2){
???if(Year%4==0&&Year%100!=0||Year%400==0){
????printday=29;
???}else{
????printday=28;
???}
??}else if(Month==4||Month==6||Month==8||Month==11){
???printday=30;
??}else if(Month==1||Month==3||Month==5||Month==7||Month==8||Month==10||Month==12){
???printday=31;
??}
??/**
?? * 开始打印日历
?? */
??boolean flag = false;
??for(int i=1;i<=printday;i++){
???if(sum%7==6){
????if(i==Day){
?????flag = true;
?????System.out.print("["+i+"]"+"\n");
????}else{
?????System.out.print(i+"\n");
????}
???}else{
????if(i==Day){
?????flag = true;
?????System.out.print("["+i+"]"+"\t");
????}else{
?????System.out.print(i+"\t");
????}
???}
???sum++;
??}
??System.out.println();
??if(!flag){
???System.out.println("当前月没有这一天,无法标记");
??}
??System.out.println("是否继续?(Y/N)");
??if("Y".equalsIgnoreCase(getString())){
??}else{
???flage = false;
???System.out.println("谢谢使用,系统退出");
??}
?}
?//正则验证输入的天数
?public static int validateDay(String cmd){
??String reg = "^[1-9]|[1][0-9]|[2][0-9]|[3][0-1]$";
??if(cmd.matches(reg)){
???return Integer.parseInt(cmd);
??}
??return -1;
?}
?//正则验证输入的月份
?public static int validateMonth(String cmd){
??String reg = "^[1-9]|[1][0-2]$";
??if(cmd.matches(reg)){
???return Integer.parseInt(cmd);
??}
??return -1;
?}
?//正则验证输入的年份
?public static int validateYear(String cmd){
??String reg = "^[1-9](\\d{2,3})$";
??if(cmd.matches(reg)){
???return Integer.parseInt(cmd);
??}
??return -1;
?}
?//正则验证输入的方法
?public static int validateSelect(String cmd){
??String reg = "[0-2]";
??if(cmd.matches(reg)){
???return Integer.parseInt(cmd);
??}
??return -1;
?}
?//菜单的方法
?public static void printMenu(){
??System.out.println("【1】当前日历【2】自定义日历【0】退出系统");
?}
?//输入数字的方法
?public static int getInt(){
??Scanner sc = new Scanner(System.in);
??return sc.nextInt();
?}
?//输入字符串的方法
?public static String getString(){
??Scanner sc = new Scanner(System.in);
??return sc.next();
?}
}
原文:http://1790235360.iteye.com/blog/2292716