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 ...
随机推荐
- 转:BeanFactory和FactoryBean的区别
一.BeanFactory简介 BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持 ...
- [CSP-S 2021] 廊桥分配 题解
写篇题解来纪念我炸掉的CSP 唯一会做的题代码写挂了(痛苦面具 思路 我看到这道题第一眼想到的是线段树,感觉可以用线段树维护飞机入站到出战的这段时间,想了半天想不到代码怎么写. 国内机场与国外机场要分 ...
- shell调用另一个脚本的三种方式fork/exec/source
exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两 ...
- Python matplotlib numpy 曼德尔布罗特集合 曼德尔布罗特 B.Madelbrot
import numpy as np import matplotlib.pyplot as plt def mandelbrot(h,w,maxit=20): y,x = np.ogrid[-1.4 ...
- Luogu P1196 [NOI2002]银河英雄传说 | 并查集
题目链接 并查集,具体看注释. #include<iostream> #include<cstdio> #include<cmath> using namespac ...
- poj 1330 Nearest Common Ancestors (最简单的LCA)
题意: 给出一棵树的结构. 给出两个点X和Y,求它俩的LCA. 思路: 只需求两个点的LCA,用了两种方法,一种离线tarjan,一种直接搞. 看代码. 代码: 方法一:直接搞. int const ...
- docker+nginx搭建tomcat集群(附录)——nginx.conf文件
附录:nginx.conf修改后的文件内容 user root;worker_processes 2; #error_log logs/error.log;#error_log logs/error. ...
- 策略路由——使用Router-Policy策略路由进行路由协议的引入
1.实验目的:实现R3-R2-R1为访问主线路,R3-R4-R1为访问备份线路 2.实验拓扑及IP,如图; 3.基本配置(端口IP) R1: <Huawei>sys[Huawei]sys ...
- 【数据结构&算法】09-队列概念&参考源码
目录 前言 队列的定义 队列的抽象数据类型 循环队列与链式队列对比 循环队列 特点 定义 循环队列相关计算 链式队列 定义 阻塞队列 并发队列 代码实现 循环队列代码 链式队列实现 前言 李柱明博客: ...
- CSS 海盗船加载特效
CSS 海盗船加载特效 <!DOCTYPE html> <html lang="en"> <head> <meta charset=