java中常用类-2

java中常用类-2

  • Calendar 类
  • LocalDate,localTime ,localDateTime
    • LocalDate
    • localTime
    • localDateTime

Calendar 类

在编写riqi日期的时候我们发现Date类中很多的方法过时了,那么如何获取年月日呢?接下来的功能就交给Calendar类。
Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。

使用方法:

Calendar c=Calendar.getInstance();

创建对象之后我们就可以使用对象进行一系列的操作了。
具体功能表示如下:

方法 描述
void add(int field, int amount) 根据日历的规则,为给定的日历字段 field 添加或减去指定的时间量 amount
boolean after(Object when) 判断此 Calendar 表示的时间是否在指定时间 when 之后,并返回判断结果
boolean before(Object when) 判断此 Calendar 表示的时间是否在指定时间 when 之前,并返回判断结果
void clear() 清空 Calendar 中的日期时间值
int compareTo(Calendar anotherCalendar) 比较两个 Calendar 对象表示的时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量),大则返回 1,小则返回 -1,相等返回 0
int get(int field) 返回指定日历字段的值
int getActualMaximum(int field) 返回指定日历字段可能拥有的最大值
int getActualMinimum(int field) 返回指定日历字段可能拥有的最小值
int getFirstDayOfWeek() 获取一星期的第一天。根据不同的国家地区,返回不同的值
static Calendar getInstance() 使用默认时区和语言坏境获得一个日历
static Calendar getInstance(TimeZone zone) 使用指定时区和默认语言环境获得一个日历
static Calendar getInstance(TimeZone zone, Locale aLocale) 使用指定时区和语言环境获得一个日历
Date getTime() 返回一个表示此 Calendar 时间值(从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒至现在的毫秒偏移量)的 Date 对象
long getTimeInMillis() 返回此 Calendar 的时间值,以毫秒为单位
void set(int field, int value) 为指定的日历字段设置给定值
void set(int year, int month, int date) 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值
void set(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、 MINUTE 和 SECOND 的值
void setFirstDayOfWeek(int value) 设置一星期的第一天是哪一天
void setTimeInMillis(long millis) 用给定的 long 值设置此 Calendar 的当前时间值

Calendar 类中定义了许多常量,分别表示不同的意义。

  • Calendar.YEAR:年份。
  • Calendar.MONTH:月份。
  • Calendar.DATE:日期。
  • Calendar.DAY_OF_MONTH:日期,和上面的字段意义完全相同。
  • Calendar.HOUR:12小时制的小时。
  • Calendar.HOUR_OF_DAY:24 小时制的小时。
  • Calendar.MINUTE:分钟。
  • Calendar.SECOND:秒。
  • Calendar.DAY_OF_WEEK:星期几。

例如,要获取当前月份可用如下代码:

int month=Calendar.getInstance().get(Calendar.MONTH);

和Date一样如果整型变量 month 的值是 0,表示当前日历是在 1 月份;如果值是 11,则表示当前日历在 12 月份。

以下是对Calender使用的示例:

Calendar calendar = Caiendar.getlnstance();    //如果不设置时间,则默认为当前时间
caiendar.setTimefnew Date();    //将系统当前时间赋值给 Calendar 对象
System.out.println("现在时刻:" + calendar.getTime());    //获取当前时间

int year = calendar.get(Calendar.YEAR);    //获取当前年份
System.out.println("现在是" + year + "年");

int month = calendar.get(Calendar.MONTH) + 1;    //获取当前月份(月份从 0 开始,所以加 1)
System.out.print(month + "月");

int day = calendar.get(Calendar.DATE);    //获取日
System.out.print(day + "日");

int week = calendar.get(Calendar.DAY_OF_WEEK) - 1;    //获取今天星期几(以星期日为第一天)
System.out.print("星期"+week);

int hour=calendar.get(Calendar.HOUR_OF_DAY);    //获取当前小时数(24 小时制)
System.out.print(hour+"时");

int minute = calendar.get(Calendar.MINUTE);    //获取当前分钟
System.out.print(minute+"分");

int second = calendar.get(Calendar.SECOND);    //获取当前秒数
System.out.print(second+"秒");

int millisecond = calendar.get(Calendar.MILLISECOND);    //获取毫秒数
System.out.print(millisecond+"毫秒");

int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);    //获取今天是本月第几天
System.out.println("今天是本月的第 "+dayOfMonth+" 天");

int dayOfWeekInMonth = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);    //获取今天是本月第几周
System.out.println("今天是本月第 "+dayOfWeekInMonth+" 周");

int many = calendar.get(Calendar.DAY_OF_YEAR);    //获取今天是今年第几天
System.out.println("今天是今年第 "+many+" 天");

Calendar c = Calendar.getInstance();
c.set(2012/8/8);    //设置年月日,时分秒将默认采用当前值
System.out.println("设置日期为 2012-8-8 后的时间:"+c.getTime());    //输出时间
Calendar instance = Calendar.getInstance();
System.out.println(instance.getTime());
instance.add(Calendar.MONDAY, 2);	
System.out.println(instance.getTime());

结果:

Tue Jun 02 17:55:56 CST 2020
Sun Aug 02 17:55:56 CST 2020

LocalDate,localTime ,localDateTime

LocalDate

获取当前时间:

	LocalDate lo =LocalDate.now();
     System.out.println(lo);
  2020-06-02

localTime

获取当前时间:

	LocalTime lo = LocalTime.now();
     System.out.println(lo);
  18:27:08.840

可以看出LocalDate获取的时间是年月日,localTime获取的时间是时分秒。

设置时分秒:

LocalTime lo = LocalTime.of(01,11,1);
     System.out.println(lo);

运行结果

01:11:01

localDateTime

获取当前时间:

 LocalDateTime lo2 =LocalDateTime.now();
     System.out.println(lo2);

2020-06-02T18:28:29.121

而localDateTime获取的时间是完整的。

重新设置所有时间可以用localDateTime。

 LocalDateTime lo1 =LocalDateTime.of(2012,01,12,11,01,01);
     System.out.println(lo1);

结果:

2012-01-12T11:01:01

计算两个时间差的时候可以用 Duration类,但这个封装类里没有年。

 LocalDateTime lo1 =LocalDateTime.of(2012,01,12,11,01,01);
     System.out.println(lo1);
     
     LocalDateTime lo2 =LocalDateTime.of(2013,01,12,11,01,01);
     System.out.println(lo2);
     Duration between = Duration.between(lo1, lo2);
     System.out.println(between.toDays());

结果:

2012-01-12T11:01:01
2013-01-12T11:01:01
366

如果想计算年差的话则可以用 Period

LocalDate lo = LocalDate.now();
     System.out.println(lo);
     LocalDate lo3 = LocalDate.of(2020, 6, 5);
     System.out.println(lo3);

     System.out.println( Period.between(lo,lo3 ).getDays());
     
//LocalDate lo = LocalDate.now();
//     System.out.println(lo);
//     LocalDate lo3 = LocalDate.of(2022, 6,2);
//     System.out.println(lo3);
//     
//    
//     System.out.println( Period.between(lo,lo3 ).getYears());

2020-06-02
2020-06-05
3

这个是注释的结果。

//2020-06-02
//2022-06-02
//2

但是 Period.between()中的两个参数是 localDate对象。
Period用来计算 年月日
Duration用来计算 日时分秒

你可能感兴趣的:(时间计算,java)