date获取当前时间年月日_Java 8中 Date 获取时间所在周一月第一天季度第一天的方式

简述

d78f6408e252bfcb4d6947927f0390c1.png

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.MONDAYTemporalAdjusters.firstDayOfMonth()

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

如果文章有些许帮助,请关注,点赞吆。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取当前季度第一天可以使用下面的代码: ```java Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int quarter = (month - 1) / 3 + 1; calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, (quarter - 1) * 3); calendar.set(Calendar.DAY_OF_MONTH, 1); Date firstDayOfQuarter = calendar.getTime(); ``` 这段代码先获取当前的年份和份,然后通过份计算出当前处于哪个季度,然后将份设置为季度的第一个,天数设置为1,从而得到当前季度第一天获取当前年、半年、季度、小时的开始和结束时间可以使用下面的代码: ```java Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int quarter = (month - 1) / 3 + 1; int halfYear = month <= 6 ? 1 : 2; int day = calendar.get(Calendar.DAY_OF_MONTH); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, 0); calendar.set(Calendar.DAY_OF_MONTH, 1); Date firstDayOfYear = calendar.getTime(); calendar.set(Calendar.MONTH, halfYear == 1 ? 5 : 11); calendar.set(Calendar.DAY_OF_MONTH, halfYear == 1 ? 30 : 31); Date lastDayOfHalfYear = calendar.getTime(); calendar.set(Calendar.MONTH, (quarter - 1) * 3); calendar.set(Calendar.DAY_OF_MONTH, 1); Date firstDayOfQuarter = calendar.getTime(); calendar.set(Calendar.MONTH, (quarter - 1) * 3 + 2); calendar.set(Calendar.DAY_OF_MONTH, 31); Date lastDayOfQuarter = calendar.getTime(); calendar.set(Calendar.DAY_OF_MONTH, day); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); Date startOfDay = calendar.getTime(); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); Date endOfDay = calendar.getTime(); ``` 这段代码首先获取当前的年份、份、季度、半年份、、小时、分钟和秒数。然后分别计算出当前年的第一天、上半年的最后一天、当前季度第一天、当前季度的最后一天、当前的开始时间和结束时间。最后将这些时间转换为 `Date` 对象即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值