Java日期时间操作基础——包含JDK1.8时间操作新特性
JDK1.7日期时间操作



示例小结
public class DateTest {
public static final String FORMAT_DATE = "yyyy-MM-dd";
public static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String FORMAT_MIN = "yyyy-MM-dd HH:mm";
public static final String FORMAT_MILLISECOND = "yyyy-MM-dd HH:mm:ss.S";
private static String[] parsePatterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm"};
/**
* SimpleDateFormat时间格式化
*/
@Test
public void test1() throws ParseException {
Date date = new Date();
/**
*常用格式:
* yyyy-MM-dd
* yyyy-MM-dd HH:mm:ss
* yyyy-MM-dd HH:mm
*/
//根据约定好的pattern时间格式进行格式化和解析
SimpleDateFormat dateFormat = new SimpleDateFormat(FORMAT);
//格式化
String dateStr = dateFormat.format(date);
System.out.println(dateStr);
//字符串解析成date对象
Date parseDate = dateFormat.parse(dateStr);
System.out.println(parseDate);
}
/**
* 2021-12-04 00:49:39
* Sat Dec 04 00:49:39 CST 2021
*/
/**
* Calendar(抽象类)日历类的使用
*/
@Test
public void test2() {
//两种创建
// Calendar calendar = new GregorianCalendar();
//默认用getInstance()创建
Calendar calendar = Calendar.getInstance();
//get()
//根据日历类型获取数据
//当天日历对应的一个月的第几天
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//set() 设置日期
calendar.set(Calendar.DAY_OF_MONTH, 9);
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//添加天数,负数表示减天数
calendar.add(Calendar.DAY_OF_MONTH, -1);
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
//getTime() 日历类转Date
Date date = calendar.getTime();
System.out.println(date);
//根据Date日期设置日历
calendar.setTime(new Date());
day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
}
/**
* 4
* 9
* 8
* Wed Dec 08 01:55:33 CST 2021
* 4
*/
}
JDK1.8日期时间操作——重点
LocalDateTime



示例小结
public class JDKDateTest {
@Test
public void test1() {
//创建日期对象
//获取当前日期时间 now()
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
// 2021-12-04
// 23:44:44.112
// 2021-12-04T23:44:44.112
//创建指定日期时间的of()方法
LocalDateTime dateTime = LocalDateTime.of(2020, 10, 10, 12, 12, 12);
LocalDate date = LocalDate.of(2020, 10, 10);
LocalTime time = LocalTime.of(12, 12, 12);
System.out.println(dateTime);
System.out.println(date);
System.out.println(time);
// 2020-10-10T12:12:12
// 2020-10-10
// 12:12:12
//getXXX方法 获取时间里的年月日的值相关的属性
int dayOfYear = dateTime.getDayOfYear();
Month month = dateTime.getMonth();
int monthValue = dateTime.getMonthValue();
int dayOfMonth = dateTime.getDayOfMonth();
System.out.println(dayOfYear);
System.out.println(month);
System.out.println(monthValue);
System.out.println(dayOfMonth);
// 284
// OCTOBER
// 10
// 10
//withXXX() 设置指定的时间相关的属性返回新的日期,原来的日期是不变的
//LocalDateTime JDK时间不可变性,因此是线程安全的。
LocalDateTime withDateTime1 = dateTime.with(localDateTime);
LocalDateTime withDateTime2 = dateTime.withDayOfMonth(11);
System.out.println("原来日期:"+dateTime);
System.out.println("修改后日期1:"+withDateTime1);
System.out.println("修改后日期2:"+withDateTime2);
System.out.println("-----------------------------------");
// 原来日期:2020-10-10T12:12:12
// 修改后日期1:2021-12-04T23:44:44.112
// 修改后日期2:2020-10-11T12:12:12
//日期时间的添加删除
//可以直接添加想要添加的天数或其他属性值,返回的日期时间会自动处理为对应的日期时间
LocalDateTime plusDateTime = dateTime.plusDays(60);
LocalDateTime plusDateTime2 = dateTime.plusHours(70);
//加减时间都可以操作负数,负数对应就是相反的操作,没有问题
LocalDateTime minusDateTime1 = dateTime.minusDays(-1);
System.out.println("原来日期:"+dateTime);
System.out.println(plusDateTime);
System.out.println(plusDateTime2);
System.out.println(minusDateTime1);
// 原来日期:2020-10-10T12:12:12
// 2020-12-09T12:12:12
// 2020-10-13T10:12:12
// 2020-10-11T12:12:12
}
}
Instant——瞬时——类似于Date


示例小结
public class InstantTest {
@Test
public void test1() {
//获取本初子午线对应的当前时间
Instant instant = Instant.now();
long timeMillis = System.currentTimeMillis();
System.out.println(instant);
// 2021-12-04T16:16:27.593Z
//添加东八区时间的偏移量
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);
// 2021-12-05T00:16:27.593+08:00
//获取19701-1-1 00:00:00到现在的毫秒数,类似于System.currentTimeMillis()
long epochMilli = instant.toEpochMilli();
System.out.println("toEpochMilli "+epochMilli);
System.out.println("currentTimeMillis "+timeMillis);
// toEpochMilli 1638634587593
// currentTimeMillis 1638634587593
//根据时间戳获取Instant示例,类似于Date(long date)
Instant instant1 = Instant.ofEpochMilli(epochMilli);
System.out.println(instant1);
// 2021-12-04T16:16:27.593Z
}
}
DateTimeFormatter——格式化解析
时间格式化注意
yyyy-MM-dd HH:mm:ss HH表示24小时时间制
yyyy-MM-dd hh:mm:ss HH表示12小时时间制
代码示例
@Test
public void test2(){
LocalDateTime now = LocalDateTime.now();
//自定义格式化类型ofPattern()
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//格式化
String nowStr = formatter.format(now);
System.out.println(nowStr);
//2021-12-05 00:49:37
//解析
LocalDateTime dateTime = LocalDateTime.parse(nowStr, formatter);
System.out.println(dateTime);
//2021-12-05T00:49:37
TemporalAccessor parse1 = formatter.parse(nowStr);
System.out.println(parse1);
// {},ISO resolved to 2021-12-05T00:49:37
//强转报错,要使用LocalDateTime.parse(nowStr, formatter);
//java.lang.ClassCastException: java.time.format.Parsed cannot be cast to java.time.LocalDateTime
// LocalDateTime parse2 = (LocalDateTime) formatter.parse(nowStr);
// System.out.println(parse2);
}




其他
UTC 和 GMT的区别是什么啊?
GMT(Greenwish Mean Time 格林威治平时),这是UTC的民间名称。GMT=UTC
没有区别。
参考
480-488
Java日期时间操作基础——包含JDK1.8时间操作新特性的更多相关文章
- 黑马程序员_Java基础:JDK1.5后的新特性:自动拆装箱,以及注意事项
------- android培训.java培训.期待与您交流! ---------- 首先来看一段代码: Integer x = new Integer(4); Integer y = 4; 在JD ...
- Java基础加强-jdk1.5的一些新特性
JDK 5.0 特性 1.静态导入(import static 语句导入一个类中的某个静态方法或所有静态方法) 如: import static java.lang.Math.*; 2.可变参数 1. ...
- 总结:JDK1.5-JDK1.8各个新特性
JDK1.5-JDK1.8各个新特性 JDK各个版本的新特性 要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.以下介绍一下JDK1 ...
- jdk1.5出现的新特性---->增强for循环
import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; ...
- [转]【JVM】调优笔记2-----JVM在JDK1.8以后的新特性以及VisualVM的安装使用
[From]https://www.cnblogs.com/sxdcgaq8080/p/7156227.html 隔壁的,加个引用做书签! [JVM]调优笔记2-----J ...
- JDK1.8之后的新特性和新接口
接口的旧特性: 就特性下接口中只有: 常量(必须赋值) 抽象方法abstract(和final static private三个关键字冲突) interface Inter { //int a ; / ...
- JDK1.5后的新特性之一:可变参数
Java中的可变参数 Java1.5后出现了一个新特性,即可变参数,格式为:类型 …参数 例如: 总的来说,可变参数可以当成是数组来用: public void testSum() { System. ...
- 转:【Java并发编程】之二十二:并发新特性—障碍器CyclicBarrier(含代码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17512983 CyclicBarrier(又叫障碍器)同样是Java5中加入的新特性,使用 ...
- Java基础知识总结之1.8新特性lambda表达式
函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.lang.Runnab ...
随机推荐
- cadence 技巧
pcb中如何选中完整的一条网络? 1 edit properties 右边 find nets 2 cadence 选中不同的网络高亮 display--->assign color在opt ...
- linux下文件特殊权限设置位S和沾附位T(转载)
今天在创建文件的时候,发现了文件权限末尾有个T,之前没留意过,后来又用c创建(open)了两个文件来查看,在我没有指定权限(省略open的第三个参数)的时候,有时还会出现S,虽然还没弄懂什么时候会出现 ...
- oeasy教您玩转vim - 56 - # 字符可视化模式
可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...
- Docker的centos镜像内无法使用systemctl命令的解决办法
在Docker官方的centos镜像内无法使用systemctl命令的解决办法, 使用该命令docker报错 Failed to get D-Bus connection: Operation not ...
- 南京大学OS笔记(1)-应用眼中的操作系统
南京大学OS笔记(1)-应用眼中的操作系统 早就想刷一刷南大JYY老师的os课.之前稍微看过几节,果然讲的风趣幽默,而且现场写代码展示水平确实很高,这次准备认真刷一刷然后好好记一下笔记.当然lab就不 ...
- WebJar的打包和使用
前言 WebJar官网:https://www.webjars.org/,对于任何与Servlet 3兼容的容器,WEB-INF/lib目录中的webjar都会自动作为静态资源提供.这是因为WEB-I ...
- blazor wasm开发chrome插件
用blazor(Wasm)开发了一个chrome插件感觉效率挺高的,分享给大家 先简单介绍下WebAssembly的原理: "WebAssembly是一种用于基于堆栈的虚拟机的二进制指令格式 ...
- 【JavaScript定时器小案例】常见的几种定时器实现的案例
[JavaScript定时器小案例]常见的几种定时器实现的案例 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 在日常开发 ...
- php 图像和水印
生成图像 $img = imagecreate(400,400); imagecolorallocate($img,255,255,255); imageellipse($img,200,200,50 ...
- 【linux系统】jmeter安装
安装步骤: 1.下载jmeter安装包 wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.1.tgz 如报错以下,需使 ...