ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java8-时间日期API

2021-02-03 23:35:49  阅读:266  来源: 互联网

标签:ldt System 日期 API LocalDateTime println now java8 out


1、传统时间格式化的线程安全问题

SimpleDateFormat 是线程不安全的


2、LocalDate , LocalTime, LocalDateTime

public void test(){
    //获取当前时间
    LocalDateTime ldt = LocalDateTime.now();
    System.out.println(ldt);

    //获取某个具体的时间
    LocalDateTime ldt2 = LocalDateTime.of(2021, 2, 3, 22, 10);
    System.out.println(ldt2);

    //年的加减
    LocalDateTime ldt3 = ldt.plusYears(1);
    System.out.println(ldt3);

    //获取某个时间的年、月、日
    System.out.println(ldt.getYear());
    System.out.println(ldt.getMonth());
}

clipboard


3、Instant: 时间戳(以Unix:1970年1月1日00:00:00 到某个时间之间的毫秒值)

@Test
public void test2(){
    //默认获取 UTC 时区(美国那边的时区)
    Instant ins1 = Instant.now();
    System.out.println(ins1);

    //标准时区偏移8小时
    OffsetDateTime offsetDateTime = ins1.atOffset(ZoneOffset.ofHours(8));
    System.out.println(offsetDateTime);

    //时间转化为毫秒
    System.out.println(ins1.toEpochMilli());
}

clipboard


4、Duration: 计算两个时间之间的间隔   Period: 计算两个日期之间的间隔

@Test
public void test3() throws InterruptedException {
    Instant ins1 = Instant.now();
    Thread.sleep(1000);
    Instant ins2 = Instant.now();
    Duration duration = Duration.between(ins1, ins2);
    System.out.println("两个时间相差:"+duration.getSeconds()+"s");
    
    LocalDate ld1 = LocalDate.of(2021, 2, 10);
    LocalDate now = LocalDate.now();
    Period between = Period.between(ld1, now);
    System.out.println(between);
    System.out.println(between.getDays());
}

clipboard


5、时间矫正器

TemporalAdjuster:时间矫正器。有时候我们需要获取例如:将日期调整到 ”下个周日“等操作

TemporalAdjusters:该类通过静态方法提供了大量的常用 TemporalAdjuster的实现

例如获取下个周日:

LocalDate nextSunday = LocalDate.now() .with(TemporalAdjusters.next(DayOfWeek.SUNDAY))

public void test1(){
    LocalDateTime ldt = LocalDateTime.now();
    System.out.println("当前时间为:"+ldt);
    //求下一个周日
    LocalDateTime nextSunday = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
    System.out.println("下一个周日为:"+nextSunday);


    //自定义: 下一个工作日
    // 传进来的参数 l ,其实就是 ldt
    LocalDateTime nextweekday = ldt.with((l) -> {
        LocalDateTime local = (LocalDateTime)l;
        DayOfWeek dayOfWeek = local.getDayOfWeek();
        if(dayOfWeek.equals(DayOfWeek.FRIDAY)){
            return local.plusDays(3);
        }else if(dayOfWeek.equals(DayOfWeek.SATURDAY)){
            return local.plusDays(2);
        }else{
            return local.plusDays(1);
        }
    });
    System.out.println(nextweekday);
}

clipboard


6、时间格式化与时区的处理

1) 时间格式化

public void test(){
    // 时间转化为固定格式的字符串
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss");
    LocalDateTime ldt = LocalDateTime.now();
    String result = ldt.format(formatter);
    System.out.println(result);

    //固定格式的字符串转化为时间
    //这里不知道哪儿出错了...
    LocalDateTime parse = ldt.parse(result,formatter);
    System.out.println(parse);
}


2)时区处理

//ZoneDate  ZoneTime  ZoneDateTime
@Test
public void test1(){
    //1、查看所有支持时区
    Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
    System.out.println(availableZoneIds);

    //2、创建时间时,指定时区
    LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Aden"));
    //或者
    LocalDateTime ldt2 = LocalDateTime.now();
    ZonedDateTime zonedDateTime = ldt2.atZone(ZoneId.of("Asia/Aden"));
}

标签:ldt,System,日期,API,LocalDateTime,println,now,java8,out
来源: https://www.cnblogs.com/houchen/p/14370329.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有