Java利用LocalDate类实现日历设计

目录
  • 前言
  • 语法
  • 日历实战
    • 步骤分解
    • 完整代码
    • 结论
    • LocalDate API

前言

在我们完成这个日历设计前,需要了解Java中的预定义类LocalDate的一些用法

语法

LocalDate.now() // 2022-07-01

会构造一个新对象,表示构造这个对象时的日期。

LocalDate.of(1999, 1, 1)

可以提供年、月和日来构造对应一个特定日期的对象:

当然,通常我们都希望将构造的对象保存在一个对象变量中:

LocalDate newYearsEve = LocalDate.of(1999, 1, 1);

当有了一个LocalDate对象,可以用方法getYeargetMonthValuegetDayOfMonth得到年、月和日:

int year = newYearsEve.getYear(); // 1999
int month = newYearsEve.getMonthValue(); // 1
int day = newYeaersEve.getDayOfMonth(); // 1

上面的方法看起来没什么意义,因为这正是构造对象时使用的那些值。不过,有时可能有一个计算得到的日期,然后你希望调用这些方法来了解它的更多信息。例如,plusDays方法会得到一个新的LocalDate,如果把应用这个方法的对象称为当前对象,这个新日期对象则是距当前对象指定天数的一个新日期:

LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);
year = aThousandDaysLater.getYear();  // 2002
month = aThousandDaysLater.getMonthValue();  // 09
day = aThousandDaysLater.getDayOfMonth();  // 26

aThousandDaysLater是在原来的日期上加了1000天,这时使用上面的方法就有效了

日历实战

需求:使用LocalDate类展示当前月的日历,格式如下:

Mon Tue Wed Thu Fri Sat Sun
                  1*  2   3 
  4   5   6   7   8   9  10 
 11  12  13  14  15  16  17 
 18  19  20  21  22  23  24 
 25  26  27  28  29  30  31

当前日期使用*号标记。可以看到,这个程序需要知道如何计算某月份的天数以及一个给定日期相应是星期几。

步骤分解

①先构造一个对象,并用当前的日期初始化

`LocalDate date = LocalDate.now();`

②获取当前的月份和日期

int month = date.getMonthValue();
int today = date.getDayOfMonth();

③将date设置为这个月的第一天,并得到这一天为星期几

date = date.minusDays(today - 1);  // 设置为当月的第一天
DayOfWeek weekday = date.getDayOfWeek();
int value = weekday.getValue();  // 1 = Monday    7 = Sunday

变量weekday设置为DayOfWeek类型的对象。我们调用这个对象的getValue方法来得到星期几的一个数值。我们会得到一个整数。星期一就返回1,星期二就返回2,依次类推,星期日就返回7.

④由于日历的第一行是缩进的,这样可使月份的第一天指向相应的星期几。下面代码会打印表头和第一行的缩进

System.out.println("Mon Tue Wed Thu Fri Sat Sun");
for (int i = 1; i < value; i++)
    System.out.print("    ");

⑤打印日历的主体,进入一个循环,其中date遍历一个月中的每一天。

每次迭代时,打印日期值。如果date是当前日期,这个日期则用一个*标记。接下来,把date推进到下一天。如果到达新的一周的第一天,则换行打印:

while (date.getMonthValue() == month) {
    System.out.printf("%3d", date.getDayOfMonth());
    if (date.getDayOfMonth() == today)
        System.out.print("*");
    else
        System.out.print(" ");
    date = date.plusDays(1);
    if (date.getDayOfWeek().getValue() == 1)
        System.out.println();
}

⑥什么时候结束呢?我们不知道这个月有几天,是28、29、30还是31。实际上,只要date还在当月就要继续迭代

完整代码

import java.time.DayOfWeek;
import java.time.LocalDate;

/**
 * @author JKC
 * @Description:
 * @date 2022/7/1 10:53
 */
public class 制作日历 {
    public static void main(String[] args) {
        // 创建一个日期对象,并进行初始化
        LocalDate date = LocalDate.now();
        System.out.println(date);
        // 获取当前月份和日期
        int month = date.getMonthValue();
        int today = date.getDayOfMonth();

        // 将date设置为这个月的第一天,并得到这一天为星期几
        date = date.minusDays(today - 1);
        // 设置为DayOfWeek类型的对象。调用这个对象的getValue方法来得到星期几的一个数值
        DayOfWeek weekday = date.getDayOfWeek();
        int value = weekday.getValue();  // 1 = Monday    7 = Sunday

        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        for (int i = 1; i < value; i++)
            System.out.print("    ");

        while (date.getMonthValue() == month) {
            System.out.printf("%3d", date.getDayOfMonth());
            if (date.getDayOfMonth() == today)
                System.out.print("*");
            else
                System.out.print(" ");
            date = date.plusDays(1);
            if (date.getDayOfWeek().getValue() == 1)
                System.out.println();
        }
        if (date.getDayOfWeek().getValue() != 1)
            System.out.println();
    }
}

结论

上面的示例程序的重点是展示如何使用一个类的接口完成相当复杂的任务,而无须了解实现细节

LocalDate API

static LocalDate now()
 //构造一个表示当前日期的对象

static LocalDate of(int year, int month, int day)
//构造一个表示给定日期的对象

int getYear()
int getMonthValue()
int getDayOfMonth()
//得到当前日期的年、月和日。

DayOfWeek getDayOfWeek
//得到当前日期是星期几,作为DayOfWeek类的一个实例返回。调用getValue来得到1~7之间的一个数,表示这是星期几,1表示星期一,7表示星期日

LocalDate plusDays(int n)
LocalDate minusDays(int n)
//生成当前日期之后或之前n天的日期

到此这篇关于Java利用LocalDate类实现日历设计的文章就介绍到这了,更多相关Java LocalDate日历内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java实现日历应用程序设计

    本文实例为大家分享了java实现日历应用程序设计的具体代码,供大家参考,具体内容如下 1.效果和要求 *在文本框inputYear中输入年份,验证年份的有效性:按回车键后,显示输入年份的正确日历* 单击previousMonth按钮可以显示当前月的上一月的日历:如果月份小于1,则显示上一年的12月* 单击nextMonth按钮,可以显示当前月的下一月的日历:如果月份大于1,则显示下一年的1月 2.源码 CalendarBean.java import java.util.Calendar; pu

  • 实例详解Java库中的LocalDate类

    目录 Java库中的LocalDate类 Java获取上周指定日的日期 总结 Java库中的LocalDate类 类库设计者决定将保存时间与给时间点命名分开.所以标准Java类库分别包含了两个类:一个用来表示时间点的Date类:另一个是用来表示大家熟悉的日历表示法的LocalDate类. 将时间与日历分开是一种很好的面向对象设计.通常,最好使用不同的类表示不同的概念. 不要使用构造器来构造LocalDate类的对象.实际上,应当使用静态工厂方法代表你调用构造器. 下面表达式 LocalDate.

  • Java中使用LocalDate根据日期来计算年龄的实现方法

    Java中和日期直接相关的类有很多,平时最常用到的就是java.util package下面的Date和Calendar,需要用到格式的时候还会用到java.text.SimpleDateFormat 首先吐槽一下,Date和Calendar实际用起来还是有一些别扭的,刚开始用的时候不熟悉,老是分不清Date和Calendar类的具体用法和区别. 而且Calendar类的set方法来设置日期时又有一些反人类,设置月份的时候总是要脑补一下减去1,比如要设置为2018年1月6日就要设置成2018,0

  • java8 LocalDate 使用详解

    LocalDate 看看新的LocalDate怎么用: // 取当前日期: LocalDate today = LocalDate.now(); // -> 2019-03-29 // 根据年月日取日期,04月就是04: LocalDate crischristmas = LocalDate.of(2019, 04, 22); // -> 2019-04-22 // 根据字符串取: LocalDate endOfFeb = LocalDate.parse("2019-03-28&qu

  • Java LocalDateTime常用操作方法

    Java8提供了新的时间接口LocalDateTime.本文主要介绍了Java8中LocalDateTime的一些常用操作方法.不多说,直接上代码.欲知详情,可以看看官网. LocalDateTime localDateTime = LocalDateTime.now(); //时间运算,相加相减 System.out.println(localDateTime.plusYears(2)); //加2年 System.out.println(localDateTime.plusDays(2));

  • Java8时间转换(LocalDateTime)代码实例

    这篇文章主要介绍了java8时间转换(LocalDateTime)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.将LocalDateTime转为自定义的时间格式的字符串 public static String getDateTimeAsString(LocalDateTime localDateTime, String format) { DateTimeFormatter formatter = DateTimeFormatt

  • Java编写日历表的3种方式

    大家好,今天我和大家分享一下用Java编写日历表,我用了3种方式实现这一功能的. 首先我们来看看一个日历表有什么特征.在这里我就把我电脑上的日历表截下来分析一下 我们从上向下看:这个日历表显示了年份,月份,星期数即星期一到星期日,每一天对应一个星期数,天数每隔七天换一下行,当月的总天数.还有一个就是每个月的第一天是接着上个月的最后一天的. 我们发现我们想要创建一个日历表就只需要知道年份,月份和该月份的第一天是星期几还有就是该月份的总天数就行. 年份和月份是我们自己设置要查看的年份和月份,每个月的

  • Java利用LocalDate类实现日历设计

    目录 前言 语法 日历实战 步骤分解 完整代码 结论 LocalDate API 前言 在我们完成这个日历设计前,需要了解Java中的预定义类LocalDate的一些用法 语法 LocalDate.now() // 2022-07-01 会构造一个新对象,表示构造这个对象时的日期. LocalDate.of(1999, 1, 1) 可以提供年.月和日来构造对应一个特定日期的对象: 当然,通常我们都希望将构造的对象保存在一个对象变量中: LocalDate newYearsEve = LocalD

  • java利用Calendar类打印日历

    本文实例为大家分享了java利用Calendar类打印日历的具体代码,供大家参考,具体内容如下 import java.util.Calendar; import java.util.Date; import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.println("请输入日期(如2018-12-07):"); Scanner sc=new Sc

  • Java利用AlphaComposite类合并图像

    package com.hdwang.test; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.

  • Java利用File类创建文件的示例代码

    只需要调用该类的一个方法createNewFile(),但是在实际操作中需要注意一些事项,如判断文件是否存在,以及如何向新建文件中写入数据等. import java.io.*; public class CreateNewFile{ //该方法用于创建文件,参数分别是文件路径和文件名.文件内容,如:myfile.doc HelloJava! public void createNewFile(String fileDirectoryAndName,String fileContent){ tr

  • Java如何利用LocalDate获取某个月的第一天与最后一天日期

    目录 问题描述: 使用TemporalAdjusters方法实现 使用getDayOfMonth()方法实现 补充:使用LocalDateTime也可以实现相关功能 java获取指定日期当月和下个月的第一天 总结 问题描述: 以一个月为周期进行查询时,如果用户没有选择查询的月份,我们想要默认查询当月或上个月的数据,这时,如何获取到一个月的第一天和最后一天日期呢? 以下介绍两种方式采用LocalDate格式日期的实现,以及采用LocalDateTime格式日期的实现.直接上代码! 使用Tempor

  • java 利用java反射机制动态加载类的简单实现

    如下所示: ////////////////// Load.java package org.bromon.reflect; import java.util.ArrayList; import java.util.List; public class Load implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<

  • java实现利用String类的简单方法读取xml文件中某个标签中的内容

    1.利用String类提供的indexOf()和substring()快速的获得某个文件中的特定内容 public static void main(String[] args) { // 测试某个词出现的位置 String reqMessage = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" + "<in>" + "<head&g

  • Java编程中利用InetAddress类确定特殊IP地址的方法

    InetAddress类 InetAddress类用来封装我们前面讨论的数字式的IP地址和该地址的域名. 你通过一个IP主机名与这个类发生作用,IP主机名比它的IP地址用起来更简便更容易理解. InetAddress类内部隐藏了地址数字. InetAddress类中的工厂方法 InetAddress类没有明显的构造函数.为生成一个InetAddress对象,必须运用一个可用的工厂方法. 工厂方法(factory method)仅是一个类中静态方法返回一个该类实例的约定. 对于InetAddres

  • Java基于Calendar类输出指定年份和月份的日历代码实例

    这篇文章主要介绍了Java 使用Calendar类输出指定年份和月份的日历,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 package com.cyl.test3; import java.util.Calendar; import java.util.Scanner; public class RiLi { public static void main(String[] args){ int year= 2020; int mo

随机推荐