JDK1.7日期时间操作



示例小结

  1. public class DateTest {
  2. public static final String FORMAT_DATE = "yyyy-MM-dd";
  3. public static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
  4. public static final String FORMAT_MIN = "yyyy-MM-dd HH:mm";
  5. public static final String FORMAT_MILLISECOND = "yyyy-MM-dd HH:mm:ss.S";
  6. private static String[] parsePatterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
  7. "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm"};
  8. /**
  9. * SimpleDateFormat时间格式化
  10. */
  11. @Test
  12. public void test1() throws ParseException {
  13. Date date = new Date();
  14. /**
  15. *常用格式:
  16. * yyyy-MM-dd
  17. * yyyy-MM-dd HH:mm:ss
  18. * yyyy-MM-dd HH:mm
  19. */
  20. //根据约定好的pattern时间格式进行格式化和解析
  21. SimpleDateFormat dateFormat = new SimpleDateFormat(FORMAT);
  22. //格式化
  23. String dateStr = dateFormat.format(date);
  24. System.out.println(dateStr);
  25. //字符串解析成date对象
  26. Date parseDate = dateFormat.parse(dateStr);
  27. System.out.println(parseDate);
  28. }
  29. /**
  30. * 2021-12-04 00:49:39
  31. * Sat Dec 04 00:49:39 CST 2021
  32. */
  33. /**
  34. * Calendar(抽象类)日历类的使用
  35. */
  36. @Test
  37. public void test2() {
  38. //两种创建
  39. // Calendar calendar = new GregorianCalendar();
  40. //默认用getInstance()创建
  41. Calendar calendar = Calendar.getInstance();
  42. //get()
  43. //根据日历类型获取数据
  44. //当天日历对应的一个月的第几天
  45. int day = calendar.get(Calendar.DAY_OF_MONTH);
  46. System.out.println(day);
  47. //set() 设置日期
  48. calendar.set(Calendar.DAY_OF_MONTH, 9);
  49. day = calendar.get(Calendar.DAY_OF_MONTH);
  50. System.out.println(day);
  51. //添加天数,负数表示减天数
  52. calendar.add(Calendar.DAY_OF_MONTH, -1);
  53. day = calendar.get(Calendar.DAY_OF_MONTH);
  54. System.out.println(day);
  55. //getTime() 日历类转Date
  56. Date date = calendar.getTime();
  57. System.out.println(date);
  58. //根据Date日期设置日历
  59. calendar.setTime(new Date());
  60. day = calendar.get(Calendar.DAY_OF_MONTH);
  61. System.out.println(day);
  62. }
  63. /**
  64. * 4
  65. * 9
  66. * 8
  67. * Wed Dec 08 01:55:33 CST 2021
  68. * 4
  69. */
  70. }

JDK1.8日期时间操作——重点

LocalDateTime





示例小结

  1. public class JDKDateTest {
  2. @Test
  3. public void test1() {
  4. //创建日期对象
  5. //获取当前日期时间 now()
  6. LocalDate localDate = LocalDate.now();
  7. LocalTime localTime = LocalTime.now();
  8. LocalDateTime localDateTime = LocalDateTime.now();
  9. System.out.println(localDate);
  10. System.out.println(localTime);
  11. System.out.println(localDateTime);
  12. // 2021-12-04
  13. // 23:44:44.112
  14. // 2021-12-04T23:44:44.112
  15. //创建指定日期时间的of()方法
  16. LocalDateTime dateTime = LocalDateTime.of(2020, 10, 10, 12, 12, 12);
  17. LocalDate date = LocalDate.of(2020, 10, 10);
  18. LocalTime time = LocalTime.of(12, 12, 12);
  19. System.out.println(dateTime);
  20. System.out.println(date);
  21. System.out.println(time);
  22. // 2020-10-10T12:12:12
  23. // 2020-10-10
  24. // 12:12:12
  25. //getXXX方法 获取时间里的年月日的值相关的属性
  26. int dayOfYear = dateTime.getDayOfYear();
  27. Month month = dateTime.getMonth();
  28. int monthValue = dateTime.getMonthValue();
  29. int dayOfMonth = dateTime.getDayOfMonth();
  30. System.out.println(dayOfYear);
  31. System.out.println(month);
  32. System.out.println(monthValue);
  33. System.out.println(dayOfMonth);
  34. // 284
  35. // OCTOBER
  36. // 10
  37. // 10
  38. //withXXX() 设置指定的时间相关的属性返回新的日期,原来的日期是不变的
  39. //LocalDateTime JDK时间不可变性,因此是线程安全的。
  40. LocalDateTime withDateTime1 = dateTime.with(localDateTime);
  41. LocalDateTime withDateTime2 = dateTime.withDayOfMonth(11);
  42. System.out.println("原来日期:"+dateTime);
  43. System.out.println("修改后日期1:"+withDateTime1);
  44. System.out.println("修改后日期2:"+withDateTime2);
  45. System.out.println("-----------------------------------");
  46. // 原来日期:2020-10-10T12:12:12
  47. // 修改后日期1:2021-12-04T23:44:44.112
  48. // 修改后日期2:2020-10-11T12:12:12
  49. //日期时间的添加删除
  50. //可以直接添加想要添加的天数或其他属性值,返回的日期时间会自动处理为对应的日期时间
  51. LocalDateTime plusDateTime = dateTime.plusDays(60);
  52. LocalDateTime plusDateTime2 = dateTime.plusHours(70);
  53. //加减时间都可以操作负数,负数对应就是相反的操作,没有问题
  54. LocalDateTime minusDateTime1 = dateTime.minusDays(-1);
  55. System.out.println("原来日期:"+dateTime);
  56. System.out.println(plusDateTime);
  57. System.out.println(plusDateTime2);
  58. System.out.println(minusDateTime1);
  59. // 原来日期:2020-10-10T12:12:12
  60. // 2020-12-09T12:12:12
  61. // 2020-10-13T10:12:12
  62. // 2020-10-11T12:12:12
  63. }
  64. }

Instant——瞬时——类似于Date



示例小结

  1. public class InstantTest {
  2. @Test
  3. public void test1() {
  4. //获取本初子午线对应的当前时间
  5. Instant instant = Instant.now();
  6. long timeMillis = System.currentTimeMillis();
  7. System.out.println(instant);
  8. // 2021-12-04T16:16:27.593Z
  9. //添加东八区时间的偏移量
  10. OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
  11. System.out.println(offsetDateTime);
  12. // 2021-12-05T00:16:27.593+08:00
  13. //获取19701-1-1 00:00:00到现在的毫秒数,类似于System.currentTimeMillis()
  14. long epochMilli = instant.toEpochMilli();
  15. System.out.println("toEpochMilli "+epochMilli);
  16. System.out.println("currentTimeMillis "+timeMillis);
  17. // toEpochMilli 1638634587593
  18. // currentTimeMillis 1638634587593
  19. //根据时间戳获取Instant示例,类似于Date(long date)
  20. Instant instant1 = Instant.ofEpochMilli(epochMilli);
  21. System.out.println(instant1);
  22. // 2021-12-04T16:16:27.593Z
  23. }
  24. }

DateTimeFormatter——格式化解析

时间格式化注意

  1. yyyy-MM-dd HH:mm:ss HH表示24小时时间制
  2. yyyy-MM-dd hh:mm:ss HH表示12小时时间制

代码示例

  1. @Test
  2. public void test2(){
  3. LocalDateTime now = LocalDateTime.now();
  4. //自定义格式化类型ofPattern()
  5. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  6. //格式化
  7. String nowStr = formatter.format(now);
  8. System.out.println(nowStr);
  9. //2021-12-05 00:49:37
  10. //解析
  11. LocalDateTime dateTime = LocalDateTime.parse(nowStr, formatter);
  12. System.out.println(dateTime);
  13. //2021-12-05T00:49:37
  14. TemporalAccessor parse1 = formatter.parse(nowStr);
  15. System.out.println(parse1);
  16. // {},ISO resolved to 2021-12-05T00:49:37
  17. //强转报错,要使用LocalDateTime.parse(nowStr, formatter);
  18. //java.lang.ClassCastException: java.time.format.Parsed cannot be cast to java.time.LocalDateTime
  19. // LocalDateTime parse2 = (LocalDateTime) formatter.parse(nowStr);
  20. // System.out.println(parse2);
  21. }





其他

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. 转:BeanFactory和FactoryBean的区别

    一.BeanFactory简介 BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持 ...

  2. [CSP-S 2021] 廊桥分配 题解

    写篇题解来纪念我炸掉的CSP 唯一会做的题代码写挂了(痛苦面具 思路 我看到这道题第一眼想到的是线段树,感觉可以用线段树维护飞机入站到出战的这段时间,想了半天想不到代码怎么写. 国内机场与国外机场要分 ...

  3. shell调用另一个脚本的三种方式fork/exec/source

    exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两 ...

  4. 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 ...

  5. Luogu P1196 [NOI2002]银河英雄传说 | 并查集

    题目链接 并查集,具体看注释. #include<iostream> #include<cstdio> #include<cmath> using namespac ...

  6. poj 1330 Nearest Common Ancestors (最简单的LCA)

    题意: 给出一棵树的结构. 给出两个点X和Y,求它俩的LCA. 思路: 只需求两个点的LCA,用了两种方法,一种离线tarjan,一种直接搞. 看代码. 代码: 方法一:直接搞. int const ...

  7. docker+nginx搭建tomcat集群(附录)——nginx.conf文件

    附录:nginx.conf修改后的文件内容 user root;worker_processes 2; #error_log logs/error.log;#error_log logs/error. ...

  8. 策略路由——使用Router-Policy策略路由进行路由协议的引入

    1.实验目的:实现R3-R2-R1为访问主线路,R3-R4-R1为访问备份线路 2.实验拓扑及IP,如图; 3.基本配置(端口IP) R1: <Huawei>sys[Huawei]sys ...

  9. 【数据结构&算法】09-队列概念&参考源码

    目录 前言 队列的定义 队列的抽象数据类型 循环队列与链式队列对比 循环队列 特点 定义 循环队列相关计算 链式队列 定义 阻塞队列 并发队列 代码实现 循环队列代码 链式队列实现 前言 李柱明博客: ...

  10. CSS 海盗船加载特效

    CSS 海盗船加载特效 <!DOCTYPE html> <html lang="en"> <head> <meta charset=