栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA常用工具类之“时间刺客”——DateUtils

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA常用工具类之“时间刺客”——DateUtils

DateUtils :

      写代码时最常见的“兄弟”——时间处理工具类DateUtils

首先,我们需要先准备几样“东西”:

//  时区
    public static final int DEFAULT_TIME_ZONE = 0;

// 中国时区

public static final int CHINA_TIME_ZONE = 8;

+++++++++划重点:

常见时间格式:

private static final String[] prototypePatterns =
        {   "yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss",
            "yyyy-MM-dd HH:mm", "HH:mm:ss.SSS", "yyyy-MM-dd", "dd-MM-yyyy",
            "yy-MM-dd", "MM-dd-yyyy", "HH:mm:ss","HH:mm"
        };


    public static final DateTimeFormatter DATE_TIME_FORMATTER
            = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    public static final DateTimeFormatter DATE_FORMATTER
            = DateTimeFormatter.ofPattern("yyyy-MM-dd");

//东八区上海时区

 public static final ZoneId CHINA_ZONE_ID = ZoneId.of("Asia/Shanghai");

public static Instant[] getDayStartTimeAndEndTime(Instant time) {
        //获取北京时间的零点
        ZoneId zoneId = CHINA_ZONE_ID;
        LocalDateTime localDateTime = LocalDateTime.ofInstant(
                time, zoneId);

       //获取当天的开始时间
        Instant minTime = localDateTime.toLocalDate()
                .atStartOfDay(zoneId).toInstant();

       //获取当天的结束时间
        Instant maxTime = localDateTime.toLocalDate()
                .atStartOfDay(zoneId).plusDays(1L).plusSeconds(-1L).toInstant();
        return new Instant[]{minTime, maxTime};
    }

目录

DateUtils :


获取东8区的某个月的开始时间和结束时间

    public static Instant[] getMonthStartTimeAndEndTime(Instant time) {
        LocalDateTime LocalBegin = time.atZone(CHINA_ZONE_ID).toLocalDateTime();
        Instant minTime = LocalBegin.minusDays(LocalBegin.getDayOfMonth())
                .toLocalDate().atStartOfDay(CHINA_ZONE_ID).toInstant();
        Instant maxTime = LocalBegin.minusDays(LocalBegin.getDayOfMonth())
                .minus(-1, ChronoUnit.MONTHS)
                .toLocalDate().atStartOfDay(CHINA_ZONE_ID)
                .minus(1L,ChronoUnit.MILLIS).toInstant();
        return new Instant[]{minTime, maxTime};
    }

 判断两个Instant类型的时间,是否为同一天

    public static boolean isSameDate(Instant date1, Instant date2) {
        ZoneId zoneId = CHINA_ZONE_ID;
        LocalDate localDate1 = LocalDateTime.ofInstant(date1, zoneId).toLocalDate();
        LocalDate localDate2 = LocalDateTime.ofInstant(date2, zoneId).toLocalDate();
        return localDate1.compareTo(localDate2) == 0;
    }
接下来就是最刺激的类型互转了: 

1、Instant转为(String)类型

    public static String toChinaTimeFormat(Instant /confirm/iTime) {
        if (confirmTime == null) {
            return null;
        }
        return DATE_TIME_FORMATTER.format(
                LocalDateTime.ofInstant(/confirm/iTime, CHINA_ZONE_ID)
        );
    }

public void test(){
        String s = toChinaTimeFormat(Instant.now());
        System.out.println(s);
    }


输出:2021-08-05 17:17:05

// DATE_TIME_FORMATTER是前面设置的日期格式哦,也可以换别的!

//本来想解释一下ofInstant()源码的,但网上仿佛更全面,有兴趣的同学可以百度

2、LocalDate转为Instant类型

    public static Instant localDateToInstant(LocalDate date) {
        ZoneId zone = ZoneId.systemDefault();
        return date.atStartOfDay().atZone(zone).toInstant();
    }

 @Test
    public void test(){
        Instant instant = localDateToInstant(LocalDate.now());
        System.out.println(instant);
    }
输出结果:2021-08-04T16:00:00Z  (采用的是系统默认的时区)
注:LocalDate.now()获取的是当天日期,转还为Instant时,是从当日0点算起的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/295034.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号