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

没有区别。

参考

Java入门视频教程

480-488

Java日期时间操作基础——包含JDK1.8时间操作新特性的更多相关文章

  1. 黑马程序员_Java基础:JDK1.5后的新特性:自动拆装箱,以及注意事项

    ------- android培训.java培训.期待与您交流! ---------- 首先来看一段代码: Integer x = new Integer(4); Integer y = 4; 在JD ...

  2. Java基础加强-jdk1.5的一些新特性

    JDK 5.0 特性 1.静态导入(import static 语句导入一个类中的某个静态方法或所有静态方法) 如: import static java.lang.Math.*; 2.可变参数 1. ...

  3. 总结:JDK1.5-JDK1.8各个新特性

    JDK1.5-JDK1.8各个新特性 JDK各个版本的新特性 要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.以下介绍一下JDK1 ...

  4. jdk1.5出现的新特性---->增强for循环

    import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; ...

  5. [转]【JVM】调优笔记2-----JVM在JDK1.8以后的新特性以及VisualVM的安装使用

    [From]https://www.cnblogs.com/sxdcgaq8080/p/7156227.html               隔壁的,加个引用做书签! [JVM]调优笔记2-----J ...

  6. JDK1.8之后的新特性和新接口

    接口的旧特性: 就特性下接口中只有: 常量(必须赋值) 抽象方法abstract(和final static private三个关键字冲突) interface Inter { //int a ; / ...

  7. JDK1.5后的新特性之一:可变参数

    Java中的可变参数 Java1.5后出现了一个新特性,即可变参数,格式为:类型 …参数 例如: 总的来说,可变参数可以当成是数组来用: public void testSum() { System. ...

  8. 转:【Java并发编程】之二十二:并发新特性—障碍器CyclicBarrier(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17512983 CyclicBarrier(又叫障碍器)同样是Java5中加入的新特性,使用 ...

  9. Java基础知识总结之1.8新特性lambda表达式

    函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.lang.Runnab ...

随机推荐

  1. [HNOI2009]双递增序列(洛谷P4728)+小烈送菜(内部训练题)——奇妙的dp

    博主学习本题的经过嘤嘤嘤: 7.22 : 听学长讲(一知半解)--自己推(推不出来)--网上看题解--以为自己会了(网上题解是错的)--发现错误以后又自己推(没推出来)--给学长发邮件--得到正确解法 ...

  2. jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例

    本文实例讲述了jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能.分享给大家供大家参考,具体如下: 弹出层:两种方式 一是打开网页就自动弹出层二是点击弹出 <!DOCTYPE html ...

  3. Python 调用上级目录的文件

    程序结构如下: – src |-- mod1.py |-- lib | |-- mod2.py |-- sub | |-- test.py 具体代码如下: 在test.py里调用mod1 mod2 i ...

  4. Luogu P4390 [BOI2007]Mokia 摩基亚 | CDQ分治

    题目链接 $CDQ$分治. 考虑此时在区间$[l,r]$中,要计算$[l,mid]$中的操作对$[mid+1,r]$中的询问的影响. 计算时,排序加上树状数组即可. 然后再递归处理$[l,mid]$和 ...

  5. Shadertoy 教程 Part 5 - 运用SDF绘制出更多的2D图形

    Note: This series blog was translated from Nathan Vaughn's Shaders Language Tutorial and has been au ...

  6. redis 集群环境搭建

    原理: 1,每个Redis群集的节点都需要打开两个TCP连接,由于这两个连接就需要两个端口,分别是用于为客户端提供服务的常规Redis TCP命令端口(例如6379)以及通过将10000和命令端口相加 ...

  7. dart系列之:dart语言中的函数

    目录 简介 函数的参数 main函数 匿名函数 闭包 函数的返回值 总结 简介 函数是所有编程语言都有的内容,不管是面向对象还是面向过程,函数都是非常重要的一部分.dart中的函数和java中的函数有 ...

  8. uni-app map组件关于marker标记点动态设置的问题

    marker是Array类型,赋值的时候只能对整个数组进行更改赋值,不能只改变内部的对象,亲测Vue.$set()也不行 this.marker = [ { latitude: 39.90, long ...

  9. BAT面试必问细节:关于Netty中的ByteBuf详解

    在Netty中,还有另外一个比较常见的对象ByteBuf,它其实等同于Java Nio中的ByteBuffer,但是ByteBuf对Nio中的ByteBuffer的功能做了很作增强,下面我们来简单了解 ...

  10. oracle 使用union提示ORA-00907:缺少右括号

    在使用union的时候提示:ORA-00907:缺少右括号 此原因是因为在union的左边和右边都有order by,因此需要去掉一边的order by,保留一个即可. 例如: select * fr ...