电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java編寫日歷表的3種方式

瀏覽:3日期:2023-02-12 13:37:02

大家好,今天我和大家分享一下用Java編寫日歷表,我用了3種方式實現這一功能的。

首先我們來看看一個日歷表有什么特征。在這里我就把我電腦上的日歷表截下來分析一下

Java編寫日歷表的3種方式

我們從上向下看:這個日歷表顯示了年份,月份,星期數即星期一到星期日,每一天對應一個星期數,天數每隔七天換一下行,當月的總天數。還有一個就是每個月的第一天是接著上個月的最后一天的。

我們發現我們想要創建一個日歷表就只需要知道年份,月份和該月份的第一天是星期幾還有就是該月份的總天數就行。

年份和月份是我們自己設置要查看的年份和月份,每個月的總天數我們都是知道的,只要知道月份就能知道該月份的總天數,不過2月份除外,2月份的總天數需要判斷該年是平年還是閏年。最后一個問題就是怎么樣獲取該月份的第一天是星期幾?在上面我提到過每個月的第一天是接著上個月的最后一天的,并且1900年1月1日是星期一,我們可以把從1900年到我們指定日期的前一個月的總天數求出來對7取余,就是上一個月最后一天的星期數(也是這個月開始前面的空格數)

我寫的第一種方式:不用Java中的類

獲取從1900年到我們指定日期的前一個月的總天數

//指定的日歷年份 public static int year; //指定的日歷月份 public static int month;​ //獲得總天數 public static int getDaysFrom1900() {int days = 0;//統計從1900年到指定日歷年份的前一年的天數for (int i = 1900; i < year; i++) { days += isLeapYear(i) ? 366 : 365;}//統計從一月到指定日歷月份的前一個月的天數for (int i = 1; i < month; i++) { days += getDaysFromMonth(i);}return days; } //獲取指定月份的天數 private static int getDaysFromMonth(int month) {switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:return 31; case 2:return isLeapYear(year) ? 29 : 28; default:return 30;} }​ //判斷指定年份是平年還是閏年 private static boolean isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0); }

​顯示:這里用計數器來計數,能計空格的數量

//顯示日歷 public static void show() {//獲取從1900年到指定月份前一個月的總天數int totalDays = getDaysFrom1900();//獲取指定月份的天數int daysOfMonth = getDaysFromMonth(month);//獲取指定月份第一天前面的空格數int space = totalDays % 7;//計數器int count = 0;//顯示System.out.println('一t二t三t四t五t六t日');System.out.println('==========================');for (int i = 0; i < space; i++) { count++; System.out.print('t');}for (int i = 1; i <= daysOfMonth; i++) { count++; System.out.print(i + 't'); if (count % 7 == 0) {count = 0;//換行System.out.println(); }}}

我寫的第二種方式:使用Java中的Calendar類,Calendar類中提供了getActualMaximum(Calendar.DAY_OF_MONTH)方法來獲取指定月份的總天數,我們可以利用Calendar類中的set(Calendar.DAY_OF_MONTH, 1)方法把日期中的天數設置為當月的第一天,然后通過get(Calendar.DAY_OF_WEEK)獲取當月的第一天的星期數

public static void show(int y, int m) {//獲取當前系統時間Calendar c = Calendar.getInstance();//獲取當前的日期int year = c.get(Calendar.YEAR);int month = c.get(Calendar.MONTH) + 1;int day = c.get(Calendar.DAY_OF_MONTH);//設置指定的日期c.set(Calendar.YEAR,y);c.set(Calendar.MONTH,m-1);c.set(Calendar.DAY_OF_MONTH, 1);//獲取指定月份的總天數int dayOfMonth = c.getActualMaximum(Calendar.DAY_OF_MONTH);//獲取指定月份第一天的星期int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;//顯示System.out.println('一t二t三t四t五t六t日');System.out.println('==========================');dayOfWeek = dayOfWeek == 0 ? 7 : dayOfWeek;//獲取指定月份前面的空格數int space = dayOfWeek - 1;int count = 0;for (int i = 0; i < space; i++) { count++; System.out.print('t');}for (int i = 1; i <= dayOfMonth; i++) { count++; //判斷是不是當前系統的日期時間 String date = (y == year && m == month && i == day) ? '*' + i + 't' : i + 't'; System.out.print(date); if (count % 7 == 0) {count = 0;System.out.println(); }}​ }

​我寫的第三種方式:使用Java中的LocalDate類,LocalDate類中提供了getMonth()的方法來獲取指定的月份而Month枚舉中提供了

length(boolean leapYear)的方法來獲取指定月的總天數,LocalDate類中還提供了getDayOfWeek()的方法來獲取指定天數的星期數。我用LocalDate類中提供的LocalDate.of(y,m,1)把日期中的天數設置為當月的第一天**

public static void show(int y, int m) {//獲取當前系統時間LocalDate date = LocalDate.now();//獲取當前的日期int year = date.getYear();int month = date.getMonth().getValue();int day = date.getDayOfMonth();//設置指定的日期LocalDate date1 = LocalDate.of(y,m,1);//獲取指定月份的總天數int daysOfMonth = date1.getMonth().length(y % 4 == 0 && y % 100 != 0 || y % 400 == 0);//獲取指定月份前面的空格數int space= date1.getDayOfWeek().getValue()-1;System.out.println('一t二t三t四t五t六t日');System.out.println('==========================');int count = 0;for (int i = 0; i < space; i++) { count++; System.out.print('t');}for (int i = 1; i <= daysOfMonth; i++) { count++; //判斷是不是當前系統的日期時間 String src = (y == year && m == month && i == day) ? '*' + i + 't' : i + 't'; System.out.print(src); if (count % 7 == 0) {count = 0;System.out.println(); }} }

main函數:第一種方式中的show()方法沒有參數,因為我設置了成員變量來接收,下面的是第二和第三種方式的main函數。

public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println('請輸入年份:');int year = sc.nextInt();System.out.println('請輸入月份:');int month = sc.nextInt();show(year, month); }

運行結果:

第一種方式:

Java編寫日歷表的3種方式

第二和第三中方式:我在顯示表的時候判斷了一下是不是當前的系統日期。

Java編寫日歷表的3種方式

總結:對于日歷表的問題,只要知道月份的第一天是星期幾還有就是該月份的總天數就能解決。第一種方式是我初學Java的解決方式、第二種方式是我學到Calendar類的解決方式、第三種方式是我學到LocalDate類的解決方式。隨著我們不斷的學習Java這門語言,我們的眼界就會在這個學習的過程中不斷開闊,就會對一個問題產生不同的看法,不同的解決思路。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 混合生育酚_醋酸生育酚粉_琥珀酸生育酚-山东新元素生物科技 | 阻燃剂-氢氧化镁-氢氧化铝-沥青阻燃剂-合肥皖燃新材料 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 粘度计,数显粘度计,指针旋转粘度计| 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 烟气在线监测系统_烟气在线监测仪_扬尘检测仪_空气质量监测站「山东风途物联网」 | 包装机传感器-搅拌站传感器-山东称重传感器厂家-济南泰钦电气 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 海峰资讯 - 专注装饰公司营销型网站建设和网络营销培训 | 德州网站制作 - 网站建设设计 - seo排名优化 -「两山建站」 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 净气型药品柜-试剂柜-无管道净气型通风柜-苏州毕恩思 | 粘弹体防腐胶带,聚丙烯防腐胶带-全民塑胶 | 伶俐嫂培训学校_月嫂培训班在哪里报名学费是多少_月嫂免费政府培训中心推荐 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | 博客-悦享汽车品质生活 | 蓄电池回收,ups电池后备电源回收,铅酸蓄电池回收,机房电源回收-广州益夫铅酸电池回收公司 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 纸箱抗压机,拉力机,脂肪测定仪,定氮仪-山东德瑞克仪器有限公司 | 2025福建平潭岛旅游攻略|蓝眼泪,景点,住宿攻略-趣平潭网 | 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 不干胶标签,不干胶标签纸_厂家-山东同力胶粘制品 | 北京四合院出租,北京四合院出售,北京平房买卖 - 顺益兴四合院 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 |