Java包管理器和时间日期类的运用

7.1 Java包管理器

  •   包(package)的导入

  为了管理更多的代码互不侵犯,所以采用一个叫“包管理”的机制来管理代码,简单来说就是把不同的Java代码放在不同的文件夹里,这个文件夹就是“包(package)”。对于使用不同包的代码,得需要先导入这个包。

  String,int,double,long这些属于基础类型,所以不需要导入包。

  在Java当中导入包语句就是 import 包名+类名;  ,包名+类名组成了完整的包路径。

  注意:这一句代码是在类文件的最前面

  LocalDate这个类的完整包路径是java.time.LocalDate,代码如下:

import java.time.LocalDate;


public class DateTest {

  public static void main(String[] args) {
    // 得到当前的完整时间
    LocalDate now = LocalDate.now();
    // 打印出时间
    System.out.println(now.toString());
  }
}
  • 日期时间和字符串的转化

  刚才代码输出的结果是 2021-08-18,而我们习惯看到的是这样的格式: 年-月-日,我们需要借助一个日期格式化类来帮助我们做格式化,这个类就是DateTimeFormatter,它的完整包路径是java.time.format.DateTimeFormatter,需要先导入一下。

  

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class DateTest5 {

  public static void main(String[] args) {

    LocalDate time = LocalDate.now();
    // 打印默认的时间数据
    System.out.println(time.toString());

    // 创建一个格式化方式
    DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy年MM月dd");
    // 执行时间的格式化处理,得到期望格式的时间字符串
    String timeStr = df.format(time);
    // 打印时间
    System.out.println(timeStr);

  }
}

如果想得到2021/08/18,可以通过下面代码实现

  

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class DateTest6 {

  public static void main(String[] args) {

    LocalDate time = LocalDate.now();

    // 创建一个格式化方式
    DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy/MM/dd");
    // 执行时间的格式化处理,得到期望格式的时间字符串
    String timeStr = df.format(time);
    // 打印时间
    System.out.println(timeStr);

  }
}
  • 获取日期时间的具体值

  从一个日期得到年份,月份,日,星期几等数据

  

import java.time.LocalDate;

public class DateTest7 {

  public static void main(String[] args) {

    LocalDate time = LocalDate.now();

    // 得到当前时间所在年
    int year = time.getYear();
    System.out.println("当前年份 " + year);

    // 得到当前时间所在月
    int month = time.getMonth().getValue();
    System.out.println("当前月份 " + month);

    // 得到当前时间在这个月中的天数
    int day = time.getDayOfMonth();
    System.out.println("当前日 " + day);

    // 得到当前时间所在星期数
    int dayOfWeek = time.getDayOfWeek().getValue();
    System.out.println("当前星期 " + dayOfWeek);

  }
}

getMonth()和getOfWeek()方法返回值不是具体数字,而是对象,所以必须用getValue()得具体数字。

7.2时间日期类的运用

  • 字符串转化为日期时间

  前边我们通过time.toString()这个方法的执行把time的数据变成了字符串,所以就会有一个方向的需求把字符串变成LocalDate类型

import java.time.LocalDate;

public class DateTest8 {

  public static void main(String[] args) {
    // 定义一个时间字符串,日期是2019年1月1日
    String date = "2019-01-01";

    // 把字符串转化位 LocalDate 对象,并得到字符串匹配的日期
    LocalDate date2 = LocalDate.parse(date);
    // 打印出日期
    System.out.println(date2.toString());
  }
}

如上代码,LocalDate.parse(date)这个parse方法可以把日期字符串转化为日期类型,注意这个字符串格式是2019-02-09类型的。如果日期字符串不是yyyy-MM-dd,就需要借助DateTimeFormatter,比如

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class DateTest81 {

  public static void main(String[] args) {
    // 定义一个时间字符串,日期是2019年1月1日
    String date = "2019/01/01";

    DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    // 把字符串转化位 LocalDate 对象,并得到字符串匹配的日期
    LocalDate date2 = LocalDate.parse(date,df);
    // 打印出日期
    System.out.println(date2.toString());
  }
}
  • 日期时间的计算

  比如说预定酒店,2021年5月1日入住,3天后离店。从需求上可以看出,只要我们对日期的天数进行+3的计算就可以完成了。

import java.time.LocalDate;

public class DateTest9 {

  public static void main(String[] args) {

    LocalDate leaveTime = getLeaveTime("2019-05-01", 4);
    System.out.println(leaveTime.toString());
  }

  /**
   * 根据入住时间和入住天数得到离店时间
   *
   * @param checkInTime
   * @param days
   * @return
   */
  public static LocalDate getLeaveTime(String checkInTime, int days) {
    // 把字符串转化为 LocalDate 类型
    LocalDate time = LocalDate.parse(checkInTime);
    // 使用 plusDays 添加天数,得到新的时间
    LocalDate leaveTime = time.plusDays(days);
    return leaveTime;
  }

}

除了处理天数相加外,还可以进行其他日期时间的计算,

import java.time.LocalDate;

public class DateTest10 {

  public static void main(String[] args) {

    LocalDate now = LocalDate.now();
    System.out.println("当前:" + now.toString());

    System.out.println("加法运算");
    System.out.println("加1天:" + now.plusDays(1));
    System.out.println("加1周:" + now.plusWeeks(1));
    System.out.println("加1月:" + now.plusMonths(1));
    System.out.println("加1年:" + now.plusYears(1));

    System.out.println("减法运算");
    System.out.println("减1天:" + now.minusDays(1));
    System.out.println("减1周:" + now.minusWeeks(1));
    System.out.println("减1月:" + now.minusMonths(1));
    System.out.println("减1年:" + now.minusYears(1));

  }

}
  • 两个日期时间的判断

  在日常工作中我们经常会对两个时间进行判断,比如说判断两个时间是否是同一天,一个日期是否在另外一个日期的前面或者后面,来看一下对应的方法如何执行

  

import java.time.LocalDate;

public class DateTest11 {

  public static void main(String[] args) {

    LocalDate now = LocalDate.now();

    // 可以对两个 LocalDate 进行比较,
    // 可以判断一个日期是否在另一个日期之前或之后,
    // 或者判断两个日期是否是同年同月同日。

    boolean isBefore = now.minusDays(1).isBefore(LocalDate.now());

    System.out.println("是否在当天之前:" + isBefore);

    boolean isAfter = now.plusDays(1).isAfter(LocalDate.now());
    System.out.println("是否在当天之后:" + isAfter);


    // 判断是否是当天
    boolean sameDate = now.isEqual(LocalDate.now());
    System.out.println("是否在当天:" + sameDate);
  }

}

例:

  小明在日历上添加了一个提醒,2021-10-08和小凡一起去上海迪士尼玩

  需求1:创建一个notice方法,这个方法用来执行提醒任务并接受一个字符串

       1.如果传入日期早于10月8号,则打印:活动还未开始

       2.如果是10月8日,则打印:活动开始啦

       3.如果超过10月8日,则打印:活动已经结束啦

  需求2:在main方法里执行3次notice方法,每次调用的参数值不同,分别是:

   1.2021-03-08

   2.2021-10-08

   3.2021-12-29

 1 import java.time.LocalDate;
 2 
 3 public class Test803 {
 4 
 5   public static void main(String[] args) {
 6 
 7     notice("2019-03-08");
 8     notice("2019-04-08");
 9     notice("2019-04-09");
10 
11   }
12 
13   public static void notice(String time) {
14     // 把字符串转化为 LocalDate 类型
15     LocalDate dateTime = LocalDate.parse(time);
16 
17     LocalDate noticeTime = LocalDate.parse("2019-04-08");
18 
19     if (dateTime.isBefore(noticeTime)) {
20       System.out.println("活动还未开始");
21     } else if (dateTime.isAfter(noticeTime)) {
22       System.out.println("活动已经结束啦");
23     } else if (dateTime.equals(noticeTime)) {
24       System.out.println("活动开始啦");
25     }
26 
27   }
28 
29 }

运行结果:

/usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -javaagent:/home/coder/idea/lib/idea_rt.jar=45341:/home/coder/idea/bin -Dfile.encoding=UTF-8 -classpath /home/coder/project/j1_8_2_22_cs/target/classes Test803
活动还未开始
活动开始啦
活动已经结束啦

进程已结束,退出代码为 0

 

Java包管理器和时间日期类的运用

上一篇:SpringBoot-Data


下一篇:centos 安装 Java