java实现日历打印
目录
- 前言
- 实现思路
- 代码
- MonthUtils.java
- TimeUtils.java
- main方法
前言
最新项目需要实现月变化效果,能通过月日历查看每一天的变化情况。下面来说一说实现逻辑。
实现思路
查看过去一年的每个月的日历,查询规律
- 日历由6行7列组成,42个单元格
- 日历包含上个月、本月、下个月的数据。
- 上个月的数据,先找出本月的第一周为周几,假设为周二,则上个月有一天。
- 下个月的数据,因为固定是42个单元格,42-上个月count-本月count,则为下个月有多少天
话不多说,先看看效果
代码
MonthUtils.java
public static List<String> getMonthDay(String str){List<String> list = new ArrayList<>();String zeroStr = str+"-01 00:00:00";String firstMonthDay = TimeUtils.getFirstMonthDay(zeroStr);String lastMonthDay = TimeUtils.getLastMonthDay(zeroStr);int count =0; //count计数,达到42说明月份的日历已完整//第一周为星期几int firstMonthDayByWeek = TimeUtils.getFirstMonthDayByWeek(zeroStr);//当月第一天Date startTime = TimeUtils.convertDate(firstMonthDay, "yyyy-MM-dd");Date endTime = TimeUtils.convertDate(lastMonthDay, "yyyy-MM-dd");for (int i = firstMonthDayByWeek - 1; i > 0; i--) {String yyyyMMdd =TimeUtils.converStringDate(TimeUtils.getAfterDay(startTime, i),"yyyy-MM-dd");list.add(yyyyMMdd);count++;}//打印本月数据List<String> dateList = TimeUtils.getAscDateList(firstMonthDay, lastMonthDay,"yyyy-MM-dd");for (String s : dateList) {list.add(s);count++;}int endDay = 42 - count;for (int i = 1; i <= endDay; i++) {String yyyyMMdd =TimeUtils.converStringDate(TimeUtils.getAfterDay(endTime, -i),"yyyy-MM-dd");list.add(yyyyMMdd);count++;}return list;}
TimeUtils.java
/*** 获取当月的第一天* @return*/public static final String getFirstMonthDay(String dateTime){LocalDate localDate = getLocalDate(dateTime);LocalDate with = localDate.with(TemporalAdjusters.firstDayOfMonth());String firstDay = with+" 00:00:00";return firstDay;}private static LocalDate getLocalDate(String dateTime) {DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");//2.把字符串转成localDatereturn LocalDateTime.parse(dateTime, df).toLocalDate();} /*** 获取当月的最后一天* @return*/public static final String getLastMonthDay(String dateTime){LocalDate localDate = getLocalDate(dateTime);LocalDate with = localDate.with(TemporalAdjusters.lastDayOfMonth());String firstDay = with+" 00:00:00";return firstDay;}/*** 获取当月的第一天(周几)* @return*/public static final int getFirstMonthDayByWeek(String dateTime){LocalDate localDate = getLocalDate(dateTime);LocalDate with = localDate.with(TemporalAdjusters.firstDayOfMonth());DayOfWeek dayOfWeek = with.getDayOfWeek();return dayOfWeek.getValue();}public static String converStringDate(Date date, String format) {SimpleDateFormat sdf = new SimpleDateFormat(format);try {return sdf.format(date);} catch (Exception e) {e.printStackTrace();}return null;}/*** 从小到大(取一个月的数据)* @ param formate 日期格式*/public static List<String> getAscDateList(String startTime, String endTime,String formate) {LocalDate startDate = getLocalDate(startTime);LocalDate endDate = getLocalDate(endTime);List<String> result = new ArrayList<>();LocalDate tempDate = null;//用户存储中间变量Long num = endDate.toEpochDay() - startDate.toEpochDay();for (int i = 0; i <= num; i++) {tempDate = startDate;if (tempDate.toEpochDay() - endDate.toEpochDay() <= 0) {Date yyyyMMdd = TimeUtils.convertDate(startDate.toString(), "yyyy-MM-dd");//14点整,取一张图片result.add(TimeUtils.converStringDate(yyyyMMdd,formate));startDate = tempDate.plusDays(1);}}//System.out.println(result);return result;}/*** date和format格式必须一直** @param data* @param format* @return*/public static Date convertDate(String data, String format) {SimpleDateFormat sdf = new SimpleDateFormat(format);Date langDate;try {langDate = sdf.parse(data);return langDate;} catch (Exception e) {e.printStackTrace();}return null;}/*** 获取几天之前的数据** @param endDate* @param day* @return*/public static Date getAfterDay(Date endDate, int day) {Calendar calc = Calendar.getInstance();calc.setTime(endDate);calc.add(calc.DATE, -day);Date minDate = calc.getTime();return minDate;}
main方法
String str = "2020-12";List<String> monthDay = getMonthDay(str);System.out.println("星期一\t\t\t星期二\t\t\t星期三\t\t\t星期四\t\t\t星期五\t\t\t星期六\t\t\t星期日");int count = 1;for (String s : monthDay) {if(count % 7 == 0){System.out.println(s);}else{System.out.print(s+"\t\t");}count++;}
java实现日历打印相关推荐
- Java日历打印_使用java 打印日历
package hangshu; /* * 打印从1900年到2.year年的日历 */ import java.util.Scanner; public class Calender { publi ...
- 利用Java Calendar类打印日历
利用Java Calendar类打印日历 说到日历,我们接触的就多了,每天都在和日历打交道,每年家里都会买日历.那么,大家知道如何用Java打印日历呢?在这里,我说一下如何用Calendar类打印日历 ...
- java 时区处理_如何使用Java处理日历时区?
如何使用Java处理日历时区? 我有一个来自我的应用程序的Timestamp值. 用户可以在任何给定的本地TimeZone中. 由于此日期用于假定给定时间始终为GMT的WebService,因此我需要 ...
- 怎么用java做日历_怎么用java做日历?实例讲解
Java是一种高级语言,可以用到很多领域中,这不,用java还可以做日历,那么怎么用java做日历?今天我们就给大家讲解一下用java做日历的方法,学会大家也可以做一个日历出来! 我们需要用到两个类: ...
- java 动态日历的实现
java 动态日历的实现 动态日历 动态日历要求打印指定年份和指定月份的日历展示界面,可显示星期与日期信息.动态日历集合了java众多基础语法,包括数据类型.条件分支.循环语句.运算符.面向对象 .类 ...
- java发布后功能不能用,急项目发布后java写的打印功能失效了-求解解决方法
当前位置:我的异常网» J2EE » 急项目发布后java写的打印功能失效了-求解解决方法 急项目发布后java写的打印功能失效了-求解解决方法 www.myexceptions.net 网友分享于 ...
- Java——IO(打印流)
1,打印字节流(PrintStream)的概述: 打印流可以很方便的将对象的toString()结果输出并且自动加上换行,而且可以使用自动刷出的模式 System.out就是一个PrintStream ...
- java settime_Java日历setTime()方法及示例
java settime 日历类setTime()方法 (Calendar Class setTime() method) setTime() method is available in java. ...
- Outlook怎么打印日历 Outlook日历打印教程
Outlook中的日历想要打印出来,该怎么打印日历呢?下面我们就来看看详细的教程. Outlook怎么打印日历? Outlook日历打印教程 1.下载安装outlook软件. Outlook怎么打印日 ...
- JAVA 可视化日历
JAVA 可视化日历(完美版) 坚持每天都写一篇这样的小文章,越努力,越幸运!!! 顺便提一句 老师曰:"冰心曰:"好读书,多读书,读好书""" 废话 ...
最新文章
- FileUpload控件
- cudnn下载_记录新电脑安装Ubuntu18.04,CUDA, cuDNN全过程
- Unity游戏中的一些规范和优化建议
- 志邦橱柜坑爹,志邦橱柜大忽悠,志邦橱柜欺骗
- SSM错误:Exception in thread “main“ java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletReque
- python编程(基于订阅模式的mvc实现)
- redhad6.4 配置在线yum源
- phpmailer 发送Outlook邮件时535 5.7.3 authentication unsuccessful错误的解决办法 谷歌邮箱 SMTP ERROR: Password command
- Android 学习之路
- perl脚本进制转换
- redies 学习笔记
- 如何成为一名优秀设计师?(锤子科技视觉总监罗子雄演讲实录)
- 14亿人参与,共建台湾省实景地图!
- 用php做滚动,用PHP+java实现自动新闻滚动窗口
- 如何发现网站被劫持被黑DNS被污染
- 共轭函数和原函数的关系
- 50件关于学霸与学渣的小事
- 怎么装python的keras库_Keras 教程: Python 深度学习终极入门指南
- OSPF的三张表(邻居表、LSDB表、路由表)、LSA、LSDB、SPF与路由表之间的关联、OSPF建立的8种必要条件
- .NET主流的ORM框架
热门文章
- Entering emergency mode. Exit the shell to continue.
- 计算机主机可以有几个硬盘,一台电脑可以安装盘几个硬盘?
- 俄罗斯方块是java_俄罗斯方块(java版)
- 51单片机游戏(俄罗斯方块)
- 动点四边形周长最短_中考数学之四边形周长最小值
- 关于WEP的产生原因及其原理
- 5-3 jmu-java-m05-使用Comparator接口排序 (10分)
- 新媒体运营胡耀文教程:短视频+怎么变现?一文读懂4大商业模式
- b哩b哩视频弹幕爬虫程序(python)
- Event Handing guide for iOS