目录

  • 前言
  • 实现思路
    • 代码
    • 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实现日历打印相关推荐

  1. Java日历打印_使用java 打印日历

    package hangshu; /* * 打印从1900年到2.year年的日历 */ import java.util.Scanner; public class Calender { publi ...

  2. 利用Java Calendar类打印日历

    利用Java Calendar类打印日历 说到日历,我们接触的就多了,每天都在和日历打交道,每年家里都会买日历.那么,大家知道如何用Java打印日历呢?在这里,我说一下如何用Calendar类打印日历 ...

  3. java 时区处理_如何使用Java处理日历时区?

    如何使用Java处理日历时区? 我有一个来自我的应用程序的Timestamp值. 用户可以在任何给定的本地TimeZone中. 由于此日期用于假定给定时间始终为GMT的WebService,因此我需要 ...

  4. 怎么用java做日历_怎么用java做日历?实例讲解

    Java是一种高级语言,可以用到很多领域中,这不,用java还可以做日历,那么怎么用java做日历?今天我们就给大家讲解一下用java做日历的方法,学会大家也可以做一个日历出来! 我们需要用到两个类: ...

  5. java 动态日历的实现

    java 动态日历的实现 动态日历 动态日历要求打印指定年份和指定月份的日历展示界面,可显示星期与日期信息.动态日历集合了java众多基础语法,包括数据类型.条件分支.循环语句.运算符.面向对象 .类 ...

  6. java发布后功能不能用,急项目发布后java写的打印功能失效了-求解解决方法

    当前位置:我的异常网» J2EE » 急项目发布后java写的打印功能失效了-求解解决方法 急项目发布后java写的打印功能失效了-求解解决方法 www.myexceptions.net  网友分享于 ...

  7. Java——IO(打印流)

    1,打印字节流(PrintStream)的概述: 打印流可以很方便的将对象的toString()结果输出并且自动加上换行,而且可以使用自动刷出的模式 System.out就是一个PrintStream ...

  8. java settime_Java日历setTime()方法及示例

    java settime 日历类setTime()方法 (Calendar Class setTime() method) setTime() method is available in java. ...

  9. Outlook怎么打印日历 Outlook日历打印教程

    Outlook中的日历想要打印出来,该怎么打印日历呢?下面我们就来看看详细的教程. Outlook怎么打印日历? Outlook日历打印教程 1.下载安装outlook软件. Outlook怎么打印日 ...

  10. JAVA 可视化日历

    JAVA 可视化日历(完美版) 坚持每天都写一篇这样的小文章,越努力,越幸运!!! 顺便提一句 老师曰:"冰心曰:"好读书,多读书,读好书""" 废话 ...

最新文章

  1. FileUpload控件
  2. cudnn下载_记录新电脑安装Ubuntu18.04,CUDA, cuDNN全过程
  3. Unity游戏中的一些规范和优化建议
  4. 志邦橱柜坑爹,志邦橱柜大忽悠,志邦橱柜欺骗
  5. SSM错误:Exception in thread “main“ java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletReque
  6. python编程(基于订阅模式的mvc实现)
  7. redhad6.4 配置在线yum源
  8. phpmailer 发送Outlook邮件时535 5.7.3 authentication unsuccessful错误的解决办法 谷歌邮箱 SMTP ERROR: Password command
  9. Android 学习之路
  10. perl脚本进制转换
  11. redies 学习笔记
  12. 如何成为一名优秀设计师?(锤子科技视觉总监罗子雄演讲实录)
  13. 14亿人参与,共建台湾省实景地图!
  14. 用php做滚动,用PHP+java实现自动新闻滚动窗口
  15. 如何发现网站被劫持被黑DNS被污染
  16. 共轭函数和原函数的关系
  17. 50件关于学霸与学渣的小事
  18. 怎么装python的keras库_Keras 教程: Python 深度学习终极入门指南
  19. OSPF的三张表(邻居表、LSDB表、路由表)、LSA、LSDB、SPF与路由表之间的关联、OSPF建立的8种必要条件
  20. .NET主流的ORM框架

热门文章

  1. Entering emergency mode. Exit the shell to continue.
  2. 计算机主机可以有几个硬盘,一台电脑可以安装盘几个硬盘?
  3. 俄罗斯方块是java_俄罗斯方块(java版)
  4. 51单片机游戏(俄罗斯方块)
  5. 动点四边形周长最短_中考数学之四边形周长最小值
  6. 关于WEP的产生原因及其原理
  7. 5-3 jmu-java-m05-使用Comparator接口排序 (10分)
  8. 新媒体运营胡耀文教程:短视频+怎么变现?一文读懂4大商业模式
  9. b哩b哩视频弹幕爬虫程序(python)
  10. Event Handing guide for iOS