简易日历制作

记录一下Java实现的一个日历小程序,效果图如下:

实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar。

首先看看这两个类的用法:

类 SimpleDateFormat

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期(Date) -> 文本(String))、解析(文本(String) -> 日期(Date))和规范化。

具体要用到的方法String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。

String source) 从给定字符串的开始解析文本以生成日期。

这里我们使用SimpleDateFormat生成一个格式为“yyyy-MM”的实例,并通过parse方法将我们输入的字符串转换成日期(Date)对象。具体实现如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");        //生成格式化实例        System.out.print("请输入要查询的月份(yyyy-MM):");

String str = scanner.next();        //获取输入字符串   Date date = null;             //要获取的Date对象变量                        try {

date = sdf.parse(str);        //将字符串转成日期对象,这里会抛出格式转换异常,需要用try..catch进行处理} catch (Exception e) {

System.out.println("时间格式不正确");

}

类 Calendar

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR(年)、MONTH(月)、Date(日) 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

日历类使我们更好的对时间进行操作,使我们可以轻易获取到具体的某个时间字段,并能对时间字段进行增、减、设置等操作。

日历类是一个抽象类,所以我们不能对其进行实例化,但该类提供了一个静态方法getInstance,所以我们可以通过该方法来获取一个Calendar的对象实例。

我们的目的是做一个日历,而日历最重要的是获取当月第一天是星期几以及获取该月的最大天数,Calendar都为我们提供了具体的方法来实现。

要用到的方法Date date) 使用给定的 Date 设置此 Calendar 的时间。

我们需要用getInstance方法来获取Calendar实例,并通过上面SimpleDateFormat中字符串转成的Date对象来给我们的Calendar设置时间,最后通过get方法来获取当月第一天是星期几,并通过getActualMaximum方法来获得当月天数。

注意的几点:Calendar获取的MONTH是从0开始,最大为11

Calendar获取的DAY_OF_WEEK为从1开始,最大为7,且1代表的是星期天,2~7代表是星期一到星期六

具体实现如下:

Calendar calendar = Calendar.getInstance();        //获取Calendar对象calendar.setTime(date);        //给Calendar对象设置时间int year = calendar.get(calendar.YEAR);        //获取所设置的年份int month = calendar.get(calendar.MONTH);    //获取所设置的月System.out.println("===================="+year+"年"+(month+1)+"月======================");

c.set(c.DATE, 1);int []dayOfWeek = {7,1,2,3,4,5,6};int weekDay = c.get(c.DAY_OF_WEEK);

int firstWeekDay = dayOfWeek[weekDay-1];

接下来我们要开始打印日期了,由于我们的日期是从1开始显示,一直到当月的最大一天,但我们显示的位置要和星期相对应,所以在这里我把日期(day)开始设置为“-firstWeekDay+1”,来填充前面所需要的空白。

我们还会涉及一个换行的问题,正常逻辑是每7天换行一次,而我们的日期是从“-firstWeekDay+1”开始的,所以我们在计算换行时需要再将其加上。具体实现见代码吧。

int day = -firstWeekDay+1;        //第一天        for (;day<=c.getActualMaximum(c.DATE); day++) {

if(day<=0) {

System.out.print("\t");       //day从1开始显示

} else {

System.out.print(day+"\t");

}    if((day+firstWeekDay-1)%7 == 0){    //每计7天换行一次        System.out.println();

}

}

这样,我们的日历就完成啦。不过这里还有别的一些问题,比如我们在捕获格式转换异常时,如果程序继续往下执行,则可能会发生空指针异常,不过再添加一个异常捕获就好了。

怎么用java做日历_如何用Java制作一个简易日历相关推荐

  1. python可视化迷宫求解_如何用 Python 制作一个迷宫游戏

    相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...

  2. java 制作简易日历_如何用Java制作一个简易日历

    简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...

  3. 用java编写日历_如何用Java制作一个简易日历

    简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...

  4. 如何用Java制作一个简易日历

    简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...

  5. java 判断手机号_如何用java判断手机号运营商?

    如何用java实现判断手机号的运营商?因为每个号段都是工信部规定划分给指定运营商的,所以我们可以通过手机号码的号段来判断. 现在手机号的号段那么多,要怎样方便的的判断呢?于是我们就想到了正则表达式,在 ...

  6. java 网络爬虫_如何用Java实现网络爬虫

    原标题:如何用Java实现网络爬虫 微信公众号"书圈"后台回复[Javapachong1],下载本例的PPT和源码 作品描述 本章作品是一个能够抓取指定网站ACM比赛信息的爬虫.A ...

  7. java 做日历_如何用java做日历

    展开全部 看看下面代码: import java.awt.*; import java.awt.event.*; import java.util.Calendar; import javax.swi ...

  8. java 常驻内存_如何用java做常驻内存的程序

    展开全部 方法如62616964757a686964616fe59b9ee7ad9431333361326261下: 首先 创建一个Bean用来存贮要得到的信 public class Monitor ...

  9. python java 爬数据_如何用java爬虫爬取网页上的数据

    当我们使用浏览器处理网页的时候,有时候是不需要浏览的,例如使用PhantomJS适用于无头浏览器,进行爬取网页数据操作.最近在进行java爬虫学习的小伙伴们有没有想过如何爬取js生成的网络页面吗?别急 ...

最新文章

  1. javaweb---简易邮件发送
  2. dbeaver导出excel文件_vue将数据导出为excel文件就是如此简单
  3. python源码中的学习笔记_第11章_模块与包
  4. latex论文模板双栏
  5. 从0开始聊聊自动化静态代码审计工具
  6. kettle入门教程
  7. 修改文件 火车票买下铺_为什么坐火车时,尽量不要买下铺?过来人用亲身经历告诉你原因...
  8. 多张图片合成一张图片
  9. 物联网-云开发(Tlink云、机智云、百度云、阿里云等)
  10. 图论——最短路径之渡河问题
  11. win7 搜索文件内容
  12. 最强大脑王昱珩,一个近乎完美的男人
  13. java解压rar5 兼容rar4(改bug)
  14. ts无损剪辑合并_软购团荐丨视频无损极速分割、合并、拼接。 处理视频比你想的更简单!...
  15. 跪了!P9透露2021年阿里巴巴Java面试权威指南(泰山版)
  16. matlab复数fft,第30章 复数FFT的实现
  17. 什么是蜘蛛统计 有什么作用?
  18. Internal error: : 8 [#1] PREEMPT SMP ARM,vmlinux反汇编命令调试查找错误的步骤
  19. 人们对人工智能的看法(积极篇)
  20. 11_ue4天空球的使用

热门文章

  1. 下一代微服务!Service Mesh 2018年度总结
  2. linux系统运维基础
  3. CSS实现元素水平垂直居中的各种方法
  4. Linux磁盘管理一
  5. 【硬核】年底绩效面谈,涨薪,老板给加了1万块
  6. check的3种用法
  7. Maven配置 settings.xml 配置阿里云镜像
  8. 二叉树的基本概念 结点、度、层、森林、前辈(总结性,易理解)
  9. 在华清远见培训的感受(实习总结)
  10. 如何将qsv格式视频转换为MP4格式?qsv文件怎么转换成mp4