LocalDate类

LocalDate类代表不带时区的日期,列入2020-12-20。该类提供了静态的now()方法来获取当前的日期。这个类是线程安全的。

LocalTime类

代表不带时区的时间,例如10:20:30。该类提供了静态的now()方法来获取来获取当前的时间。这个类是线程安全的。

LocalDateTime类

LocalDateTime类代表不带时区的日期,时间,列入2020-12-20T10:15:15。该类提供了静态的now方法来获取对应的时间日期。这个类是线程安全的。

代码示例:

package com.zmd.common_class_libraries;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime; /**
* @ClassName LocalDateTime
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/7.
*/
public class LocalDateTimeExample {
public static void main(String[] args) {
//当前日期
LocalDate localDate = LocalDate.now();
System.out.println(localDate); //2021-04-07
//指定日期:某年的第多少天
LocalDate localDate1 = LocalDate.ofYearDay(2021,365);
System.out.println(localDate1);//2021-12-31
//获取指定年月日时间
LocalDate localDate2 = LocalDate.of(2021,5,1);
System.out.println(localDate2); //2021-05-01 //当前时间
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
//指定时间
localTime = LocalTime.of(22,0,0,0);
System.out.println(localTime);
//一天中的第多少秒
localTime = LocalTime.ofSecondOfDay(86399);
System.out.println(localTime); //23:59:59 //日期时间LocalDateTime类:
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime); //2021-04-07T22:22:16.560556800
//时间加减,不改变对象自身,需要获取返回值
LocalDateTime localDateTime1 = localDateTime.plusHours(5).plusMinutes(3);
System.out.println(localDateTime1); //2021-04-08T03:25:16.560556800
}
}

Calendar 类

实例创建方法Calendar.getInstance();

实例方法

getTime() 获取时间戳;

add()时间计算;

roll()时间计算超出范围走默认值;

getActualMaximum; getActualMinimum获取最大最小值

package com.zmd.common_class_libraries;

import com.sun.jdi.PathSearchingVirtualMachine;

import java.util.Calendar;

/**
* @ClassName CalendarExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/7.
*/
public class CalendarExample {
public static void main(String[] args) {
//Calendar 类为抽象类,不可以new 需要使用静态方法getInstance返回实例
Calendar calendar = Calendar.getInstance();
//获取当前日期
System.out.println(calendar.getTime());
//日期计算,改变对象本身
calendar.add(Calendar.DATE, -1);
System.out.println(calendar.getTime());
//获取时间对应的年、月、本月第几天、是当天第几个小时
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DATE));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
//获取指定字段的最大值最小值:月份0~11
System.out.println(calendar.getActualMaximum(Calendar.MONTH));
System.out.println(calendar.getActualMinimum(Calendar.MONTH)); //日期计算roll和add一样,但是超出当天或者当年月时间不会向上进位
calendar.add(Calendar.DAY_OF_MONTH,26);
System.out.println(calendar.getTime()); }
}

set

设置对应年月字段

        // set设置月份默认超出对应合理范围会自动进位
calendar.set(Calendar.MONTH,20); //设置20月,会自动进位到次年
System.out.println(calendar.getTime()); //Tue Sep 06 18:19:24 CST 2022

关闭容错

        //配置不允许自动容错
calendar.setLenient(false);
calendar.set(Calendar.MONTH,20); //关闭进位,再设置20月,抛出异常 //Exception in thread "main" java.lang.IllegalArgumentException: MONTH
System.out.println(calendar.getTime());

Calendar set方法的延迟修改策略

当执行set()方法设置时间对象更改某个字段后,并没有马上对原有实例修改,而是在下一次调用get、getTime、或者getTimeMillis方法的时候才做update更新修改后的时间。

set(int field, int value)的方法是将指定的字段修改为value,它的实现原理,其实是将Calendar类的isSet变量对应的字段设置为了true,来存储某个字段是否被设置过。在用一个isTimeSet字段来存放我们的时间应不应该要修改?

然后,我们再调用,get, getTime或者getTimeInMillis方法的时候,判断如果isTimeSet为false,会重新计算时间。

这样做的好处是什么?比如,我们set了100次,之后,我们突然get了一次,这个时候,我们就仅仅在get的时候才计算了一下时间(1次)。如果不这样做,每次set的时候,就应该计算时间(100次),这样就节约了我们的资源

 

---------------------------------------------------------------

Date类 已过时

构造时间对象

当前时间Date()

指定时间Date(毫秒时间戳)

方法:

getTime() 时间对象的时间戳,默认传入的是System.currentTimeMillis()

setTime(long time) 设置时间对象的时间戳

before/after 判断传入的时间是否在本时间实例的前或后。

package com.zmd.common_class_libraries;

import java.util.Date;

/**
* @ClassName DateTimeExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/7.
*/
public class DateTimeExample {
public static void main(String[] args) {
//当前时间戳毫秒数
System.out.println(System.currentTimeMillis());
//Date()获取当前时间
Date nowDate = new Date();
System.out.println(nowDate); //判断时间对象是否在指定时间之后
Date when = new Date(System.currentTimeMillis() - 7200 * 1000);
System.out.println(when);
System.out.println(nowDate.after(when));;
//判断时间对象是否在指定时间之前
System.out.println(nowDate.before(when));;
//通过时间对象获取时间对象的时间戳
System.out.println(nowDate.getTime());
//对比测试
System.out.println(System.currentTimeMillis()); //设置时间戳,比如设置24小时之后的
nowDate.setTime(System.currentTimeMillis() + 24 * 3600 * 1000);
System.out.println(nowDate);
}
}

java 常用类库:时间类LocalDate;LocalTime;LocalDateTime;Calendar 类;Date ;的更多相关文章

  1. Java时间处理类LocalDate和LocalDateTime常用方法

    Java时间处理类LocalDate和LocalDateTime常用方法 https://blog.csdn.net/weixin_42579074/article/details/93721757

  2. JAVA(三)JAVA常用类库/JAVA IO

    成鹏致远 | lcw.cnblog.com |2014-02-01 JAVA常用类库 1.StringBuffer StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不 ...

  3. Java 常用类库与技巧【笔记】

    Java 常用类库与技巧[笔记] Java异常体系 Java异常相关知识 Java在其创立的时候就设置了比较有效的处理机制,其异常处理机制主要回答了三个问题:what,where,why what表示 ...

  4. Google的Java常用类库 Guava资料

    java的人应该都知道Apache commons的java常用类库吧,这个Guava和commons一样,封装出一套比jdk本身提供的常用类库强大.既然有了这个这么强大的类库,我们就没必要重复造轮子 ...

  5. java8时间工具类Localdate、LocaldateTime

    优点: 1.方便. Date 只能是日期加时间的格式,而 LocalDate .LocalTime.LocalDateTime 分别代表日期,时间,日期+时间,非常灵活.再就是后者在日期计算及格式化方 ...

  6. Java常用类库(一) : Object 和日期类的简单使用

    顶哥说:Java是世界的,但项目不是! Java有非常多的类库,而我们不会也不用都去学习,毕竟你也仅仅掌握了你手机20%的功能却足够你使用,不是吗? 今天介绍以下类: l  Object l  Dat ...

  7. Java常用API——时间类

    前言:Java.util.*工具包中,包含了集合框架,旧集合类,事件模型,日期和时间设施,国际化和其他使用程序类 (字符串.随机数生成器和位数组) 一.日期类Date 1.概述 Date是一个薄包装类 ...

  8. java 常用类库:操作系统System类,运行时环境Runtime

    System类: System 类代表Java程序的运行平台,程序不能创建System类的对象, System类提供了一些类变量和类方法,允许直接通过 System 类来调用这些类变量和类方法. Sy ...

  9. JAVA常用类库简介(转)

    Java编程语言中为方便学习者学习,编制了许多类,这些类已经经过测试,都是我们编程的基础.如果不利用这些已存在的类,我们的编程工作将变得异常复杂并且效率低下.所以我们应尽可能多的掌握Java基本类库的 ...

随机推荐

  1. CSS动画--让div动起来

    CSS动画 今天在写代码时候,遇到了css动画效果如何实现的问题,经过查阅和实践,总结出一下结论. transition transition 指定动画变化的对应属性 以及动画的执行时间. 例如:tr ...

  2. 洛谷 P6295 - 有标号 DAG 计数(生成函数+容斥+NTT)

    洛谷题面传送门 看到图计数的题就条件反射地认为是不可做题并点开了题解--实际上这题以我现在的水平还是有可能能独立解决的( 首先连通这个条件有点棘手,我们尝试把它去掉.考虑这题的套路,我们设 \(f_n ...

  3. 洛谷 P5249 - [LnOI2019]加特林轮盘赌(期望 dp+高斯消元)

    题面传送门 期望真 nm 有意思,所以蒟蒻又来颓期望辣 先特判掉 \(P_0=0\) 的情况,下面假设 \(P_0\ne 0\). 首先注意到我们每次将加特林对准一个人,如果这个人被毙掉了,那么相当于 ...

  4. yum和apt-get的用法和区别

    一般来说著名的linux系统基本上分两大类: 1.RedHat系列:Redhat.Centos.Fedora等 2.Debian系列:Debian.Ubuntu等 RedHat 系列 1 常见的安装包 ...

  5. 【原创】基于RPA的软件功能自动化测试

    简介:1个功能自动化的框架 特点:OCR识别文字内容,pylackey对比图像相似度 代码极简 适用于绝大部分场景 只需要对按钮进行截图 配合第三方库可以生成漂亮的测试报告 文件结构:action-- ...

  6. 【leetcode】797. All Paths From Source to Target

    Given a directed acyclic graph (DAG) of n nodes labeled from 0 to n - 1, find all possible paths fro ...

  7. Linux学习 - 数值运算

    1 declare 声明变量类型 declare [+/-] [选项] 变量名 - 给变量设定类型属性 + 取消变量的类型属性 -i 将变量声明为整数型 -x 将变量声明为环境变量(同export) ...

  8. iOS-调用系统的短信和发送邮件功能,实现短信分享和邮件分享

    一.邮件分享 1.iOS系统自带邮件设置邮箱(此处以QQ邮箱为例)(http://jingyan.baidu.com/album/6181c3e084cb7d152ef153b5.html?picin ...

  9. Android 高级UI组件(二)

    1.ExpandableListView 显示垂直滚动两级列表的条目,只允许两个层次 整体思路: 要给ExpandableListView设置适配器,那么必须先设置数据源. 数据源,就是此处的适配器类 ...

  10. gen already exists but is not a source folder. Convert to a source folder or rename it 的解决办法

    1. Right click on the project and go to "Properties" //鼠标右键点击项目,然后选中Properties   2. Select ...