实现当前日历的打印。当前日期用*来表示。

关键得出这个月的第一天是星期几。

基姆拉尔森计算公式

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

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

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

把一月和二月看成是上一年的十三月和十四月。

例:假设是2004-1-10则换算成:2003-13-10来代入公式计算。

注意2:在大多数天主教国家的日历中,在1752年没有9.3-9.13,在这一年的日历中9月2号

后面直接就是9月14号,所以在计算某天是星期几的算法中要把这一特殊情况考虑在内

package work_0529;

import java.util.Scanner;

public class main {

private static int year;

private static int month;

private static int day;

private static boolean flag;

private static int count;//当前月份的天数

public static void main(String[] args) {

if(!getInput()) return;

if(!judgeData()) return;

int a = getData();

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

int j=0;

while(a-- > 0){ System.out.print(" "); j++;}

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

{

if(j%7==0)System.out.println("\n");

j++;

System.out.print(String.format("%4d",i));

if(day==i)System.out.print("*");

}

}

private static boolean judgeData() {

flag=false;// false表示平年。反之

if(year%100==0) flag=true;

else if(year%4==0) flag=true;

if(year<=0){

System.out.println("年份不能小于等于0");

return false;

}

if(month<=0 || month>12){

System.out.println("检查月份的范围");

return false;

}

if(month==2){

if(flag && day>29){

System.out.println("当前为"+(flag?"闰年":"平年")+"二月份不能大于29");

return false;

}

if(!flag && day > 28){

System.out.println("当前为"+(flag?"闰年":"平年")+"二月份不能大于28");

return false;

}

if(flag) count=29;

else count=28;

}

if(month==1 || month==3 || month==5|| month==7|| month==8|| month==10|| month==12)

{

if(day<=0 || day > 31){

System.out.println("检查日期的范围");

return false;

}

count =31;

}

else if(month!=2){

if(day<=0 || day>30){

System.out.println("检查日期的范围");

return false;

}

count = 30;

}

return true;

}

private static int getData() {

int tmpDay=1;// 表示

int a;

if (month == 1 || month == 2) { month += 12; year--; }

if((year<1752) || (year==1752 && month<9) ||

(year==1752 && month==9 && tmpDay<3)){

a = (tmpDay + 2*month + 3*(month+1)/5 + year + year/4 +5) % 7;

}else{

a = (tmpDay + 2*month + 3*(month+1)/5 + year + year/4 - year/100 + year/400)%7;

}

return a;

}

private static boolean getInput() {

try {

System.out.print("请输入日期(格式XXXX-XX-XX):");

Scanner scanner = new Scanner(System.in);

String str = scanner.nextLine();

year = Integer.parseInt(str.substring(0, str.indexOf('-')));

str = str.substring(str.indexOf('-') + 1, str.length());

month = Integer.parseInt(str.substring(0, str.indexOf('-')));

str = str.substring(str.indexOf('-') + 1, str.length());

day = Integer.parseInt(str);

return true;

} catch (NumberFormatException e) {

System.out.println("格式错误");

} catch (StringIndexOutOfBoundsException e2) {

System.out.println("格式错误");

}

return false;

}

}

java当月日历_java 实现打印当前月份的日历相关推荐

  1. java 输出当月日历_java 实现打印当前月份的日历

    实现当前日历的打印,当前日期用*来表示. 关键得出这个月的第一天是星期几. 基姆拉尔森计算公式 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示 ...

  2. java当月最后一天_Java日期循环,Java获取当月的第一天和最后一天 | 学步园

    1.Java日期循环 SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd"); String dateStr1 ...

  3. 乘法口诀表java加表格_Java 面试 - 打印九九乘法口诀表

    在Java面试过程中, 面试者经常会被要求手写代码或上机操作.一般来说,手写代码或上机操作,主要还是考察面试者的分析问题和解决问题的能力.打印九九乘法口诀无疑是非常基础的,那么如何实现呢?首先我们先来 ...

  4. java批量打印标签_java批量打印

    下面是实现java批量打印功能的具体工具类,其中的Info类和UserClass为具体的快递面单中要打印的信息,以参数的方式传递过来,循环调用java PrinterJob服务进行打印:这里的快递尺寸 ...

  5. java打星星_java初学打印星星以及九九乘法表

    Java中打印星星,就是为了让初学者熟悉和掌握循环的使用方法: 给定一个图形如: * *** ***** ******* 第一种方式:由循环输出各个部分,再结合起来 for(int i=1;i< ...

  6. java 当月最后一天_java中取得当月最后一天的四种方法

    java中取得当月最后一天的四种方法 第一种,使用Calendar的roll方法,在限制某个日期字段不改变的形式下,改变其他日期字段的值. 第二种,使用Calendar的getActualMaximu ...

  7. java输出文件目录_Java实现打印文件路径和展示文件目录

    /** 输入文件或目录,若为文件打印其路径和名字, * 若为目录,可选文件后缀名,若不选,则打印其下所有文件, * 若选择后缀名,则打印其下所有匹配后缀名的文件 * * * mist lee,2014 ...

  8. java输出钻石_Java程序打印钻石形状

    可以通过先打印三角形再打印倒三角形来打印菱形.一个例子如下:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  ...

  9. java输出梯形_java怎么打印等腰梯形

    西兰花伟大炮 var arrorigin = new Array(); arrorigin[0] = [0,0,0,0,1,1,1,0,0,0,0]; arrorigin[1] = [0,0,0,1, ...

最新文章

  1. pandas索引复合索引dataframe数据、索引其中一个水平(level)的所有数据行(index all rows in a level)
  2. Java中PO、BO、VO、DTO、POJO、DAO概念及其作用和项目实例图(转)
  3. spark 随机森林算法案例实战
  4. 关于mbzuai的offer的三点思考
  5. python 物理引擎 摩擦力_参赛作品2-phenom的2D物理引擎
  6. C语言 pthread_create
  7. 准备开始考试系统分析员
  8. PHP微信多级三级分佣系统,微信三级分销系统微信三级分销系统
  9. 解决方案 | 为什么要配置mysql环境变量以及如何配置
  10. 腾讯视频弹幕爬取----------之亲爱的,热爱的
  11. (转)SonicStage CP 4.3 中文迷你版和完整版下载
  12. linux密码记录木马,注意 “QQ大盗”木马注入 QQ 进程记录QQ账号与密码
  13. 韩天峰 - Swoole4-全新的PHP编程模式
  14. 前端 - bootstrap树形菜单
  15. 代码解释及MATLAB复现--灯哥四足机器人步态规划部分
  16. 实现全国行政区域结构化管理
  17. five86-1靶机渗透攻略
  18. 都2023年了,你如果还不知道这18个C语言入门经典程序就亏了
  19. html调用mp4视频播放不,为何html中嵌入mp4格式视频播放不了
  20. 《深入浅出Spring》@PropertySource、@Value注解及动态刷新实现

热门文章

  1. SPOON资源库中查找表
  2. JSP学习指南,JSTL表达式,EL表达式,JavaBean,常见问题收集
  3. mysql 数据库,表,字段的字符编码
  4. 深度学习中的随机数种子
  5. 如何格式化U盘?以及优盘格式化的恢复方法
  6. 统计学,数据挖掘,深度学习和机器学习的定义和关系
  7. 【转】硕士生写小论文的经验
  8. 红帽linux9.0+iso下载,Red Hat Linux 9.0 iso最新下载地址
  9. 前端实习生笔试_前端面试实习题目总结:
  10. Linux CentOS7下载实操