JDK8之前时间API

  1. java.lang.System类
    System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。此方法适于计算时间差。
  2. java.util.Date类
    表示特定的瞬间,精确到毫秒
  构造器:
    Date():使用无参构造器创建的对象可以获取本地当前时间。
    Date(long date)
  常用方法
    getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
    toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
    @Test
public void test1(){
System.out.println(System.currentTimeMillis()); //构造器一: Date(): 创建一个对应当前时间的Date对象
Date date1 = new Date();
System.out.println(date1.toString());//Sat Feb 16 16:35:31 GMT+08:00 2019
System.out.println(date1.getTime());//155030620414
//构造器二: 创建指定毫秒数的Date对象
Date date2 = new Date(15503962041L);
System.out.println(date2.toString());
//创建java.sgL.Date对象
java.sql.Date date3 = new java.sql.Date(35235325345L);
System.out.println(date3);//1971-02-13 //如何将java.util.Date对象转换为java.sgl.Date对象
//情况一:
Date date4 = new java.sql.Date(2343243242323L);
java.sql.Date date5 = (java.sql.Date) date4;
//情况二:
Date date6 = new Date();
java.sql.Date date7 = new java.sql.Date(date6.getTime());
}
  3. java.text.SimpleDateFormat类
    Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
    它允许进行格式化:日期--文本、解析:文本--日期
    格式化:
      SimpleDateFormat() :默认的模式和语言环境创建对象
      public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
      public String format(Date date):方法格式化时间对象date
    解析:
      public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。
    @Test
public void test2() throws ParseException {
//实例化simpLeDateFormat
SimpleDateFormat sdf = new SimpleDateFormat();
//格式化: 日期 --->字符串
Date date = new Date();
System.out.println(date);//Sat Jan 14 22:21:56 CST 2023
String format = sdf.format(date);
System.out.println(format);//23-1-14 下午10:21 //解析:格式化的逆过程,字串 ---> 日期
String str ="19-12-18 上午11:43";
Date date1 = null;
date1 = sdf.parse(str);
System.out.println(date1);//Wed Dec 18 11:43:00 CST 2019 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date2 = new Date();
String format1 = sdf1.format(date2);
System.out.println(format1);//2023-01-14 10:27:40
//解析: 要求字符串必须是符SimpleDateFormat 识别的格式(通过构造器参数体现),否则,抛异常
Date date3 = sdf1.parse("2023-01-14 10:27:40");
System.out.println(date3);//Sat Jan 14 10:27:40 CST 2023
}
  4. java.util.Calendar(日历)类
    Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
    获取Calendar实例的方法
      使用Calendar.getInstance()方法
      调用它的子类GregorianCalendar的构造器。
    一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND
      public void set(int field,int value)
      public void add(int field,int amount)
      public final Date getTime()
      public final void setTime(Date date)
    注意:
      获取月份时:一月是0,二月是1,以此类推,12月是11
      获取星期时:周日是1,周二是2 , 。。。。周六是7
    @Test
public void test3(){
//1.实例化
// 方式一:创建其子类 (GregorianCalendar) 的对象
// 方式二: 调用其静态方法getInstance()
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getClass());//class java.util.GregorianCalendar
//2.常用方法
// get()
int days = calendar.get(Calendar.DAY_OF_MONTH);//获取当天为当月的第几天
System.out.println(days);//14
//set()
calendar.set(Calendar.DAY_OF_MONTH,22);//设置当天为当月的第几天
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);//22
//add()
calendar.add(Calendar .DAY_OF_MONTH, -3);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);//19
}
  JDK8中新日期时间API
    java.time – 包含值对象的基础包
    java.time.chrono – 提供对不同的日历系统的访问
    java.time.format – 格式化和解析时间和日期
    java.time.temporal – 包括底层框架和扩展特性
    java.time.zone – 包含时区支持的类
      LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
      LocalTime表示一个时间,而不是日期。
      LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。
    部分方法:
      now() / * now(ZoneId zone):静态方法,根据当前时间创建对象/指定时区的对象
      of():静态方法,根据指定日期/时间创建对象
      getDayOfMonth()/getDayOfYear():获得月份天数(1-31) /获得年份天数(1-366)
      getDayOfWeek():获得星期几(返回一个 DayOfWeek 枚举值)
      getMonth():获得月份, 返回一个 Month 枚举值
      getMonthValue() / getYear():获得月份(1-12) /获得年份
      getHour()/getMinute()/getSecond():获得当前对象对应的小时、分钟、秒
      withDayOfMonth()/withDayOfYear()/withMonth()/withYear():将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象
      plusDays(), plusWeeks(),plusMonths(), plusYears(),plusHours():向当前对象添加几天、几周、几个月、几年、几小时
      minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours():从当前对象减去几月、几周、几天、几年、几小时
    @Test
public void test4(){
//now(): 获当前的日期、时间、日期+时间
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);//2023-01-14
System.out.println(localTime);//23:05:12.191
System.out.println(localDateTime);//2023-01-14T23:05:12.191
//of(): 设置指定的年、月、日、时、分、秒。没有偏移量
LocalDateTime localDateTime1 = LocalDateTime.of(2023,1,14,23,4,20);
System.out.println(localDateTime1);//2023-01-14T23:04:20
//getxxx()
System.out.println(localDateTime.getDayOfMonth());//14
System.out.println(localDateTime.getDayOfWeek());//SATURDAY
System.out.println(localDateTime.getMonth());//JANUARY
System.out.println(localDateTime.getMonthValue());//1
System.out.println(localDateTime.getMinute());//7
}

瞬时:Instant(类似于java.util.Date类)

部分方法:

      now():静态方法,返回默认UTC时区的Instant类的对象
      ofEpochMilli(long epochMilli):静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象
      atOffset(ZoneOffset offset):结合即时的偏移来创建一个 OffsetDateTime
      toEpochMilli():返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳
      时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
    @Test
public void test5(){
//now(): 获取本初子午线对应的标准时间
Instant instant = Instant.now();
System.out.println(instant);//2023-01-14T15:22:36.121Z
//添加时间的偏移量
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);//2023-01-14T23:22:36.121+08:00
//toEpochMiLLi(): 获取自1970年1月1 日分秒 (UTC)开始的毫秒数-> Date类的getTime()
long milli = instant.toEpochMilli();
System.out.println(milli);//1673709756121
//ofEpochMilli():通过给定的毫秒数,获取Instant实例 -->Date(Long milLis)
Instant instant1 = Instant.ofEpochMilli(1673709756121L);
System.out.println(instant1);//2023-01-14T15:22:36.121Z
}

格式化与解析日期或时间 java.time.format.DateTimeFormatter 类

    预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
    本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
    自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
    部分方法:
      ofPattern(String pattern):静态方法 , 返 回 一 个 指 定 字 符 串 格 式 的DateTimeFormatter
      format(TemporalAccessor t):格式化一个日期、时间,返回字符串
      parse(CharSequence text):将指定格式的字符序列解析为一个日期、时间
    @Test
public void test6(){
//重点:方式三:自定义的格式。如: ofPattern("yyyy-MM-dd hh:mm: ss")
DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//格式化
String str4 = formatter3.format(LocalDateTime.now( ));
System.out.println(str4);//2023-01-14 11:44:15
//解析
TemporalAccessor accessor = formatter3.parse("2023-01-14 11:44:15");
System.out.println(accessor);//{HourOfAmPm=11, MinuteOfHour=44, SecondOfMinute=15, NanoOfSecond=0, MilliOfSecond=0, MicroOfSecond=0},ISO resolved to 2023-01-14
}
 
 

Date时间API的更多相关文章

  1. java.util.Date和jdk1.8新时间API比拼

    旧的时间和日期的API的缺陷 Java 的 java.util.Date 和 java.util.Calendar 类易用性差,不支持时区,而且都不是线程安全的. Date如果不格式化,打印出的日期可 ...

  2. Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date等

    从前面的系列博客中可以看出Jdk8中java.time包中的新的日期时间API类设计的很好,但Date由于使用仍非常广泛,这就涉及到Date转LocalDateTime,LocalDateTime转D ...

  3. [转载]Java 8 日期&时间 API

    Java 8 日期和时间 声明 本文转自http://www.journaldev.com/2800/java-8-date-localdate-localdatetime-instant,以mark ...

  4. Java8 时间 API

    前言 Java8 中最为人津津乐道的新改变恐怕当属函数式 API 的加入.但实际上,Java8 所加入的新功能远不止这个. 本文将基于<Java SE8 for the Really Impat ...

  5. 计算机程序的思维逻辑 (95) - Java 8的日期和时间API

    ​本节继续探讨Java 8的新特性,主要是介绍Java 8对日期和时间API的增强,关于日期和时间,我们在之前已经介绍过两节了,32节介绍了Java 1.8以前的日期和时间API,主要的类是Date和 ...

  6. Java 8 日期时间 API

    转自:https://www.runoob.com/java/java8-datetime-api.html Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与 ...

  7. JDK8 新增的日期时间API

    背景 JDK8中增加了一套全新的日期时间API,这里进行总结下,方便查询使用. 新的时间及日期API位于 java.time 包中,下面是一些关键类. Instant:代表的是时间戳. LocalDa ...

  8. Java 8 (二) 新的时间API

    新的时间API 一)时间线 Instant对象:表示时间轴上的一个点,原点为1970-1-1的午夜. Duration对象:表示一段时间. 注意Instant和Duration类都是final. 二) ...

  9. Java编程的逻辑 (95) - Java 8的日期和时间API

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  10. Java 8 新特性-菜鸟教程 (8) -Java 8 日期时间 API

    Java 8 日期时间 API Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理. 在旧版的 Java 中,日期时间 API 存在诸多问题,其中有: ...

随机推荐

  1. 用Dockerfile制作一个java应用镜像,ubuntu基础篇

    内容介绍: (1) 本章目的,将一个自行开发的java程序webpay-api,制作为docker自定义镜像,并且进行部署. (2) 实验环境: 物理机:VMware 虚拟机 + CentOS 7.8 ...

  2. Gvim基础操作-01

    Gvim基础操作 进行代码或者是文本.脚本都要使用到文本编辑工具. vi是visual的缩写,其意为可视化.它是Unix系统文本编辑的标准工具.利用光标在屏幕上的移动,用户可以方便的建立.修改或者插入 ...

  3. 【力扣】反转链表I和II(迭代和递归)

    前言 有句话叫做:如果面试官跟你看顺眼的话,就给你出一道反转链表,否则就出一道 hard. 所以反转链表不能不会吧,要不面试官想要你都没有机会了. 206. 反转链表 class Solution { ...

  4. AJAX容易出错地方,错误处理

    myajax.js   //创建路由器对象 const express=require('express'); //引入连接池模块 const pool=require('../pool.js'); ...

  5. Unity发布Web之支持手机端

    Unity发布Web之支持手机端 需求: ___ 相信有许多人和小黑一样,会遇到各种各样的难题,这其中就有,Unity发布Web后,在手机浏览器上可运行!!!!! 分析: 为什么会有相关的需求被提出呢 ...

  6. 【开源】libserial_parse_text:命令行解析的基础库

    借助五一假期,写了一个命令行解析的基础库,一般可用于串口命令解析.TCP命令解析等等. 具有以下几种特点: 不涉及到具体硬件, 纯软件协议,与具体硬件分离. 支持不定长命令行,逐个字符解码,可以支持不 ...

  7. nginx微信对接

    location /MP_verify_l47ZUDtvieeDlVWR.txt { default_type text/html; return 200 'l47ZUDtvieeDlVWR'; }

  8. 线程基础知识10-volatile

    1 简介 Volatile保证了可见性和有序性,没有保证原子性. 1.1 保证可见性简介 可见性就是指当一个线程修改了共享变量的值时,其他线程能够立即得知这个修改.volatile变量做到了这一点. ...

  9. SRE:如何提高报警有效性?

    为什么要提升<报警有效性> 过多的报警会让负责人麻木 过多的报警会增加短信和电话的成本 提升根因定位效率 如何定义<报警有效性> 不漏报 不误报 不重报 不延报 如何量化 MT ...

  10. element plus + vue3表单第一次数据未清空的bug问题解决

    使用框架:element Plus + vue3 场景描述: 场景一: 表单的添加和修改功能,公用同一个弹框,点击修改后,点击添加表单显示的是上次修改的数据. 场景二: 点击修改,数据回显到表单,然后 ...