Java 8中 Date 获取时间所在 周一,月第一天,季度第一天,年第一天的方式

简介: Java 8 中 日期,时间API 完全重构。抛弃了原来非常复杂的 calendar. 还加入了线程安全的等更加友好的API。本文主要是记录分享 常用的 时间所在周,月,季度,年的 第一天获取方式。

周一

  /**
     * 获取时间戳的第一周
     * @param timestamp long
     * @return long
     */
    public static long getWeek1st(long timestamp) {
        return Instant.ofEpochMilli(timestamp).atZone(ZoneId.systemDefault()).with(DayOfWeek.MONDAY)
            .toInstant().toEpochMilli();
    }

月第一天

/**
     * 获取时间戳的月第一天
     * @param timestamp 时间戳
     * @return long
     */
    public static long getMonth1st(long timestamp) {
        return Instant.ofEpochMilli(timestamp).atZone(ZoneId.systemDefault())
            .with(TemporalAdjusters.firstDayOfMonth()).toInstant().toEpochMilli();
    }

季度第一天


    /**
     * 获取季度的一天
     * @param timestamp
     * @return
     */
    public static long quarterStart(long timestamp) {
        int month = Instant.ofEpochMilli(timestamp).atZone(ZoneId.systemDefault()).getMonth().getValue();
        final LocalDate date = Instant.ofEpochMilli(timestamp).atZone(ZoneId.systemDefault()).toLocalDate();
        int start = 0;
        // 第一季度
        if (month <= 3) {
            start = 1;
        } else if (month <= 6) {
            start = 4;
        } else if (month <= 9) {
            start = 7;
        } else {
            start = 10;
        }
        return date.plusMonths(start - month).with(TemporalAdjusters.firstDayOfMonth()).atStartOfDay()
            .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
    }

当前年第一天


    /**
     * 当前年的第1天
     * @return
     */
    public static long getCurrentYear1st() {
        return LocalDate.now().atStartOfDay().with(TemporalAdjusters.firstDayOfYear()).atZone(ZoneId.systemDefault())
            .toInstant().toEpochMilli();
    }

总结

本文主要涉及的重点
时间戳转换为LocalDate,需要设置时区。

Instant.ofEpochMilli(timestamp).atZone(ZoneId.systemDefault())

LocalDate 获取 周,月,年的第一天使用with

TemporalAdjusters.firstDayOfYear()
DayOfWeek.MONDAY
TemporalAdjusters.firstDayOfMonth()

没有直接提供季度的方式,需要计算

相关文章
|
Java 关系型数据库 MySQL
37、一篇文章学习 Java 中的日期相关类(Date 和 Calendar),非常常用
37、一篇文章学习 Java 中的日期相关类(Date 和 Calendar),非常常用
261 0
|
Java
关于java获取时间 new Date(),显示“上午、下午”
关于java获取时间 new Date(),显示“上午、下午”
363 0
|
Java p3c
【Java用法】请使用System.currentTimeMillis()代替new Date().getTime()
【Java用法】请使用System.currentTimeMillis()代替new Date().getTime()
404 0
|
Java API
Java之Date类以及SimpleDateFormal类的概述
Java之Date类以及SimpleDateFormal类的概述
295 0
|
9月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
352 0
|
11月前
|
安全 Java API
Java日期时间API:从Date到Java.time
本文深入解析了Java 8中引入的全新日期时间API,涵盖LocalDate、LocalTime、LocalDateTime、ZonedDateTime等核心类的使用,以及时间调整、格式化、时区处理和与旧API的互操作。通过实例对比,展示了新API在可变性、线程安全与易用性方面的显著优势,并提供迁移方案与实战技巧,助你掌握现代Java时间处理的最佳实践。
|
安全 Java API
时间日期API(Date,SimpleDateFormat,Calendar)+java8新增日期API (LocalTime,LocalDate,LocalDateTime)
这篇文章介绍了Java中处理日期和时间的API,包括旧的日期API(Date、SimpleDateFormat、Calendar)和Java 8引入的新日期API(LocalTime、LocalDate、LocalDateTime)。文章详细解释了这些类/接口的方法和用途,并通过代码示例展示了如何使用它们。此外,还讨论了新旧API的区别,新API的不可变性和线程安全性,以及它们提供的操作日期时间的灵活性和简洁性。
|
Java API
java date 增加10s后的时间
在 Java 中,要将 `Date` 对象增加 10 秒,可以通过 `Calendar` 类(适用于 Java 8 之前)或 `java.time` 包中的 `LocalDateTime`、`ZonedDateTime` 和 `Instant` 类(Java 8 及以上)实现。使用 `Calendar` 类时,需设置并修改 `Calendar` 实例。而在 `java.time` 包中,可以使用 `plus` 方法结合 `ChronoUnit.SECONDS` 来增加秒数。具体选择取决于是否需要处理时区以及 Java 版本。
574 1
|
Java
Java的Date类使用
Java的Date类使用
279 0
|
安全 Java 测试技术
滚雪球学Java(51):掌握Java Date类:用法、弊端与时间戳转换技巧,助你轻松处理日期时间
【6月更文挑战第5天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
514 0
滚雪球学Java(51):掌握Java Date类:用法、弊端与时间戳转换技巧,助你轻松处理日期时间