常用API(2)(时间)

目录

全世界世界统一相关标准

JDK7以前的时间相关类

DAate         时间

利用空参构造创建的对象,默认表示当前时间

​编辑

利用有参构造创建的对象表示指定的时间

​编辑

set和get方法

SimpleDateFormat           格式化时间

格式化时间常用模式对应关系

构造方法

常用方法

SimpleDateFormat作用

Calender               日历类

获取Calender对象的方法

1:获取当前时间的日历对象

2:细节

Calender常用方法

field参数对应为

JDK8新增的时间相关类

为什么新增JDK8时间相关类

新增的时间类与旧时间类的联系

1:Date类

2:日期格式化类SimpleDateFormat

3:日历类Calender

4:工具类

ZoneId 时区

常用方法

1:getAvailableZoneIds

2:systemDefault

3:of

示例:

Instant

ZoneDateTime

常用方法 

DateTimeFormatter

LocalDate

仅能获取或修改日历中的年月日

常用方法

常用方法示例

LocalTime

仅能获取或修改日历中的时分秒

常用方法

 常用方法示例

LocalDateTime

可以修改日历年月日时分秒全部

可以转换成LocalDate或LocalTime对象

常用方法

常用方法示例

​编辑

Duration

period

ChronoUnit


全世界世界统一相关标准

地球经线连接南北两级

纬线与赤道平行

在1884年以英国格林威治的时间作为标准时间(GreenWitch   Mean Time) 简称GMT

计算核心:以地球自转一天为24小时    太阳直射时为正午12点

以本初子午线为界右为东部地区,左为西部地区

各分12区,我国处于东八区

以本初子午线为零点时,东部加上区数表示时间,西部则减去区数

地球同一条经线的时间是一样的

直到2012年1月份

利用原子钟作为全世界统一计算标准

原理:利用铯原子的震动频率来计算时间,作为世界标准时间(UTC)

 铯原子震动9192631770次为一秒

号称两千万年误差1秒

JDK7以前的时间相关类

DAate         时间

Date类时JDK中的一个Javabean类,用来描述时间,精确到毫秒

毫秒值为从时间原点到现在过了多少毫秒

时间原点:1970年1月1日0点0分0秒

中国处于东八区所以在时间原点上加8小时

利用空参构造创建的对象,默认表示当前时间

java.util.Date d=new java.util.Date();
        System.out.println(d);

 网络时间  五月     时分秒   GMT标准时间+8小时   年份

 在使用Date类创建对象时一定要使用JAVA.util包下的

这个包下重写了toString方法,能够较标准的输出时间

不重写toString方法会直接打印对象地址值

利用有参构造创建的对象表示指定的时间

 java.util.Date d1=new Date(0l);
        System.out.println(d1);

 利用有参构造创建的对象会在时间原点上加上传入参数来表示时间

参数为0(后面是L,表示long类型)则表示在时间原点加0毫秒

1000毫秒表示1秒

set和get方法

set是在调用对象的基础上添加毫秒

get返回调用对象距离时间原点多少毫秒

 java.util.Date d1=new Date(0l);
        System.out.println(d1);

        d1.setTime(1000l);
        System.out.println(d1);

       long l= d1.getTime();
       System.out.println(l);

SimpleDateFormat           格式化时间

SimpleFormat出现的原因:使用Date获取时间的格式单一,且不符合我们的阅读习惯(其实是英文不行)

格式化时间常用模式对应关系

y--年        M--月        d--日

H--时        m--分        s--秒

例:2023-11-11 13:27:06                         2023年11月11日 13时27分06秒

        yyyy-MM-dd HH:mm:ss                     yyyy年MM月dd日 HH时mm分ss秒

注:中间的空格不可省略

构造方法

1:空参构造  ——默认格式

public  SimpleDateFormat02()

2:带参构造——指定格式

 public SimpleDateFormat02(String pattern)
 SimpleDateFormat s=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss  EE");

常用方法

1:format

public final  String format(Date date)
Date d=new Date();
           SimpleDateFormat s=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss  EE");
           String str2=s.format(d);
           System.out.println(str2);

格式化(日期对象->字符串)

将日期对象Date转化为指定格式字符串

2:parse

public Date parse(String source)
  SimpleDateFormat s2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EE");
           String str3="2023-05-03 17:59:11 周三";
            Date date=s2.parse(str3);
            System.out.println(date);

解析(字符串->日期对象)

将字符串转化为日期对象

创建SimpleDateFormat对象时应使用带参构造,且指定格式与字符串日期格式相同

SimpleDateFormat作用

1:格式化:将时间变成我们喜欢的格式

例:2023年10月1日        2023-10-1         2023/10/1

2:解析:将字符串表示的时间变成Date对象

Calender               日历类

Calender代表了系统当前时间的日历对象,可以单独修改,获取时间中的年月日

Calender是一个抽象类,不能直接创建对象

获取Calender对象的方法

 public static Calender getInstance()
Calendar c=Calendar.getInstance();

1:获取当前时间的日历对象

底层原理:会根据不同的时区获取不同的日历对象,默认表示当前时间

将时间中的纪元,年,月,日,时,分,秒,星期等等全部放到一个数组中

java.util.GregorianCalendar[time=1683110383594,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=4,WEEK_OF_YEAR=19,WEEK_OF_MONTH=1,DAY_OF_MONTH=3,DAY_OF_YEAR=123,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=6,HOUR_OF_DAY=18,MINUTE=39,SECOND=43,MILLISECOND=594,ZONE_OFFSET=28800000,DST_OFFSET=0]

2:细节

1:月份范围0-11  所以获取到的月份要加一

2:星期:在老外眼中星期日是一周的第一天

所以1星期日, 2星期一,3星期二,4星期三,5星期四,6星期五,7星期六

Calender常用方法

getTime()        获取日期对象                   

setTime(Date date)           给日历设置日期对象

getTimeMillis()        拿到时间毫秒值         

setTimeMillis(long millis)        给日历设置时间毫秒

get(int field)        取日历中某个字段信息  

set(int field,int value)            修改日历的某个字段信息

add(int field,int amount)        为某个字段增加或减少指定的值

field参数对应为

0:纪元

1:年

2:月

3:一年中的第几周

4:一个月中的第几周

5:一个月中的第几天

......

传入field参数为几就会对对应的字段执行相应方法

JAVA在Calender类中将索引对应的数字都定义为了常量

JDK8新增的时间相关类

为什么新增JDK8时间相关类

1:JDK7的时间类代码麻烦,时间对象在计算与比较时只能转换为毫秒值计算

JDK8新增的时间类带有判断时间大小与计算时间间隔的方法

2:JDK7多线程下会导致数据安全问题

JDK8时间日期对象都是不可变的,解决了这个问题

新增的时间类与旧时间类的联系

1:Date类

zoneId:时区

Instant:时间戳

ZoneDateTime:带时区的时间

2:日期格式化类SimpleDateFormat

DateTimeFormatter:用于时间的格式化和解析

3:日历类Calender

LocalDate:年,月,日

LocalTime:时,分,秒

LocalDateTime:年,月,日,时,分,秒

4:工具类

Duration:时间间隔(秒,纳秒)

period:时间间隔(年,月,日)

ChronoUnit:时间间隔(所有单位)

ZoneId 时区

常用方法

1:getAvailableZoneIds

获取Java中所支持的所有时间

static set<String> getAvailableZoneIds()

2:systemDefault

获取系统默认时区

static ZoneId systemDefault()

3:of

获取一个指定时区

static  ZoneId of(String zoneId)

示例:

  System.out.println(ZoneId.getAvailableZoneIds());

        ZoneId z= ZoneId.systemDefault();
        System.out.println(z);

        ZoneId z1=ZoneId.of("Etc/GMT+8");
       System.out.println(z1);

Instant

static Instant now()
获取当前时间的Instant对象(标准时间)
Instant now=Instant.now();
System.out.println(now);
System.out.println("___________________________");


static Instant ofxxx(long epochMilli)
根据(秒/毫秒/纳秒)获取Instant对象
Instant instant1=Instant.ofEpochMilli(1l);
System.out.println(instant1);
Instant instant2=Instant.ofEpochSecond(1);
System.out.println(instant2);
Instant instant3=Instant.ofEpochSecond(1l,1l);
System.out.println(instant3);
System.out.println("___________________________");


ZonedDateTime atZone(ZoneId zone)
指定时区
ZonedDateTime zonedDateTime=Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(zonedDateTime);
System.out.println("_______________________");


boolean isXxx(Instant otherInstant)
判断系列的方法
Instant instant4=Instant.ofEpochMilli(0l);
Instant instant5=Instant.ofEpochMilli(1000l);
System.out.println(instant4.isBefore(instant5)); //判断调用者是否在参数前
System.out.println(instant4.isAfter(instant5)); //判断调用者是否在参数后
System.out.println("___________________");


Instant minusXxx(long millisToSubtract)
减少时间系列的方法
Instant instant6=Instant.ofEpochMilli(0l);
Instant instant7=instant6.minusSeconds(1l);
System.out.println(instant6);
System.out.println(instant7);
System.out.println("____________________");

Instant plusXxx(long millisToSubtract)
增加时间系列的方法
Instant instant8=Instant.ofEpochMilli(0l);
Instant instant9=instant8.plusSeconds(1);
System.out.println(instant8);
System.out.println(instant9);

ZoneDateTime

常用方法 

1:

2:

 

3:

4:

5:

 

DateTimeFormatter

用于时间的格式化与解析 

 

LocalDate

仅能获取或修改日历中的年月日

常用方法

常用方法示例

 

 

   

LocalTime

仅能获取或修改日历中的时分秒

常用方法

 常用方法示例

 

LocalDateTime

可以修改日历年月日时分秒全部

可以转换成LocalDate或LocalTime对象

常用方法

常用方法示例

 

Duration

计算时间间隔,秒,纳秒的计算

period

计算时间间隔,年月日

ChronoUnit

计算时间间隔,所有单位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值