Java-JDk8时间(上)

目录

Date类

 ZoneId时区

 使用方法:

Instant时间戳

 代码展示:

ZoneDateTime:带时区的时间:

 使用方法:

日期格式化类:

 DateTimeFormatter 用于实践的格式化和解析:

 使用方法:


Date类

  • ZoneId:时区
  • Instant:时间戳
  • ZoneDateTime:带时区的时间

 ZoneId时区

方法名

说明

static Set<String> getAvailableZoneIds()获取java中支持的所有时区
static ZoneId systemDefault()获取系统默认时区
static ZoneId of(String zoneId)获取一个指定时区
 使用方法:
import java.time.ZoneId;
import java.util.Set;

public class A01_ZoneIdDemo1 {
    public static void main(String[] args) {
        //1.获取所有时区的名称
        Set<String> zoneIds = ZoneId.getAvailableZoneIds();
        System.out.println(zoneIds);
        //获取集合的长度
        System.out.println(zoneIds.size());//600

        //2.获取当前系统的默认时区
        ZoneId zoneId = ZoneId.systemDefault();
        System.out.println(zoneId);// Asia/Shanghai

        //3.获取指定的时区
        ZoneId id = ZoneId.of("Asia/Aqtau");
        System.out.println(id);// Asia/Aqtau

    }
}

 运行结果:

解释:

我们可以通过设置修改自己的自己的时区来改变上面zoneId的值

修该过之后:

第二步运行结果为:

Instant时间戳

方法名说明
static Instant now()获取当前时间的Instant对象(标准时间)
static Instant ofxxx(long epochMilli)根据(秒/毫秒/纳秒)获取Instant对象
ZonedDateTime atZone(ZoneId zone)指定时区
boolean isxxx(Instant otherInstant)判断系列的方法
Instant minusXXX(long millisToSubtract)减少时间系列
Instant plusXXX(long millisToSubtract)增加时间系列
 代码展示:
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class ZoneIdDemo2 {
    public static void main(String[] args) {
        //1.获取当前时间对象
        Instant now = Instant.now();
        System.out.println(now);//2023-09-22T09:14:13.202621Z

        //2.根据(秒/毫秒/纳秒)获取Instant对象
        //秒
        Instant instant1 = Instant.ofEpochSecond(0L);
        System.out.println(instant1);//1970-01-01T00:00:00Z   1970-01-01T00:00:00Z是计算机时间原点

        //毫秒
        //在时间原点的基础上加上 1000毫秒
        Instant instant2 = Instant.ofEpochMilli(1000L);
        System.out.println(instant2);//1970-01-01T00:00:01Z   1000毫秒 = 1 秒

        //纳秒
        //第一个参数是秒,第二个参数是纳秒
        //在时间原点的基础上加上 1秒 再加 1000 000 000纳秒
        Instant instant3 = Instant.ofEpochSecond(1L, 1000000000L);
        System.out.println(instant3);//1970-01-01T00:00:02Z

        //3.指定时区输出当前时间
        ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
        System.out.println(zonedDateTime);//2023-09-22T17:28:12.969746200+08:00[Asia/Shanghai]

        //4.isXXX判断
        //获取两个时间对象
        Instant instant4 = Instant.ofEpochMilli(0L);
        Instant instant5 = Instant.ofEpochMilli(1000L);

        //用于时间的判断
        //isAfter:判断调用者代表的时间时候在参数代表的时间之后
        boolean result1 = instant5.isAfter(instant4);
        //isBefore:判断调用者代表的时间时候在参数代表的时间之后前
        boolean result2 = instant4.isBefore(instant5);
        System.out.println(result1);//true
        System.out.println(result2);//true

        //5.Instant minusXXX(long millisToSubtract) 减少时间系列的方法
        Instant instant6 = Instant.ofEpochSecond(5L);
        //在instant6的基础上减一秒
        Instant instant7 = instant6.minusSeconds(1L);

        System.out.println(instant6);//1970-01-01T00:00:05Z
        System.out.println(instant7);//1970-01-01T00:00:04Z


    }
}

ZonedDateTime:带时区的时间:

方法名说明
static ZonedDateTime now()获取当前时间的ZonedDateTime对象
static ZonedDateTime ofXXX()获取指定时间的ZonedDateTime对象
ZonedDateTime withXXX(时间)修改指定时间
ZonedDateTime minusXXX(时间)减少时间系列的方法
ZonedDateTime plusXXX(时间)增加时间系列的方法
 使用方法:
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class ZoneIdDemo3 {
    public static void main(String[] args) {
        //1.获取当前对象(带时区)
        ZonedDateTime now = ZonedDateTime.now();
        System.out.println(now);//2023-09-22T18:08:42.481990200+08:00[Asia/Shanghai]

        //2.获取指定是时间对象
        //年月日时分秒纳秒方式指定
        ZonedDateTime time = ZonedDateTime.of(2023, 10, 10, 12, 10, 48,
                40, ZoneId.of("Asia/Shanghai"));

        System.out.println(time);//2023-10-10T12:10:48.000000040+08:00[Asia/Shanghai]

        //3.通过Instant+时区的方式指定获取的时间对象
        Instant instant1 = Instant.ofEpochSecond(0L);
        ZoneId zoneId = ZoneId.of("Asia/Shanghai");
        ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant1, zoneId);
        System.out.println(zonedDateTime);//1970-01-01T08:00+08:00[Asia/Shanghai]

        //4.withXXX 修改时间系列
        ZonedDateTime time1 = time.withYear(2021);
        System.out.println(time1);//2021-10-10T12:10:48.000000040+08:00[Asia/Shanghai]

        //5.减少时间
        ZonedDateTime time2 = time.minusYears(10);
        System.out.println(time2);//2013-10-10T12:10:48.000000040+08:00[Asia/Shanghai]

        //6.增加时间
        ZonedDateTime time3 = time.plusYears(10);
        System.out.println(time3);//2033-10-10T12:10:48.000000040+08:00[Asia/Shanghai]

    }
}

日期格式化类

DateTimeFormatter 用于实践的格式化和解析

 DateTimeFormatter 用于实践的格式化和解析:
 

方法名说明
static DateTimeFormatter of Pattern(格式)获取格式对象
String format(时间对象)按照指定方式格式化
 使用方法:
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class ZoneIdDemo4 {
    public static void main(String[] args) {

        //获取时间对象(带时区)
        ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));


        //static DateTimeFormatter of Pattern(格式)	获取格式对象
        DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss EE a");
        //System.out.println(dtf1);
        //String format(时间对象)	按照指定方式格式化
        String format = dtf1.format(zonedDateTime);
        System.out.println(format);//2023年09月22日 18时50分19 周五 下午

    }

 注意:jdk8新增的时间对象都是不可变的,如果修改了,减少了,增加了时间,那么调用者是捕获发生改变的,产生一个新的时间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值