zoukankan      html  css  js  c++  java
  • Java获取当天、当前月、当前年(今年)的开始和结束时间戳

    最近在做统计相关的功能的时候涉及到了获取当天的开始和结束的时间戳、当月和当年的开始结束时间戳,特此记录,以作备忘。

    相关代码

    package com.lingyejun.authenticator;
    
    import java.time.Instant;
    import java.time.LocalDateTime;
    import java.time.ZoneId;
    import java.util.Calendar;
    import java.util.TimeZone;
    
    public class CalendarAdjust {
    
        /**
         * 获取指定某一天的开始时间戳
         *
         * @param timeStamp 毫秒级时间戳
         * @param timeZone  如 GMT+8:00
         * @return
         */
        public static Long getDailyStartTime(Long timeStamp, String timeZone) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
            calendar.setTimeInMillis(timeStamp);
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.MILLISECOND, 0);
            return calendar.getTimeInMillis();
        }
    
        /**
         * 获取指定某一天的结束时间戳
         *
         * @param timeStamp 毫秒级时间戳
         * @param timeZone  如 GMT+8:00
         * @return
         */
        public static Long getDailyEndTime(Long timeStamp, String timeZone) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
            calendar.setTimeInMillis(timeStamp);
            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 59);
            calendar.set(Calendar.SECOND, 59);
            calendar.set(Calendar.MILLISECOND, 999);
            return calendar.getTimeInMillis();
        }
    
        /**
         * 获取当月开始时间戳
         *
         * @param timeStamp 毫秒级时间戳
         * @param timeZone  如 GMT+8:00
         * @return
         */
        public static Long getMonthStartTime(Long timeStamp, String timeZone) {
            Calendar calendar = Calendar.getInstance();// 获取当前日期
            calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
            calendar.setTimeInMillis(timeStamp);
            calendar.add(Calendar.YEAR, 0);
            calendar.add(Calendar.MONTH, 0);
            calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MILLISECOND, 0);
            return calendar.getTimeInMillis();
        }
    
        /**
         * 获取当月的结束时间戳
         *
         * @param timeStamp 毫秒级时间戳
         * @param timeZone  如 GMT+8:00
         * @return
         */
        public static Long getMonthEndTime(Long timeStamp, String timeZone) {
            Calendar calendar = Calendar.getInstance();// 获取当前日期
            calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
            calendar.setTimeInMillis(timeStamp);
            calendar.add(Calendar.YEAR, 0);
            calendar.add(Calendar.MONTH, 0);
            calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));// 获取当前月最后一天
            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 59);
            calendar.set(Calendar.SECOND, 59);
            calendar.set(Calendar.MILLISECOND, 999);
            return calendar.getTimeInMillis();
        }
    
        /**
         * 获取当年的开始时间戳
         *
         * @param timeStamp 毫秒级时间戳
         * @param timeZone  如 GMT+8:00
         * @return
         */
        public static Long getYearStartTime(Long timeStamp, String timeZone) {
            Calendar calendar = Calendar.getInstance();// 获取当前日期
            calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
            calendar.setTimeInMillis(timeStamp);
            calendar.add(Calendar.YEAR, 0);
            calendar.add(Calendar.DATE, 0);
            calendar.add(Calendar.MONTH, 0);
            calendar.set(Calendar.DAY_OF_YEAR, 1);
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MILLISECOND, 0);
            return calendar.getTimeInMillis();
        }
    
        /**
         * 获取当年的最后时间戳
         *
         * @param timeStamp 毫秒级时间戳
         * @param timeZone  如 GMT+8:00
         * @return
         */
        public static Long getYearEndTime(Long timeStamp, String timeZone) {
            Calendar calendar = Calendar.getInstance();// 获取当前日期
            calendar.setTimeZone(TimeZone.getTimeZone(timeZone));
            calendar.setTimeInMillis(timeStamp);
            int year = calendar.get(Calendar.YEAR);
            calendar.clear();
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 59);
            calendar.set(Calendar.SECOND, 59);
            calendar.set(Calendar.MILLISECOND, 999);
            calendar.roll(Calendar.DAY_OF_YEAR, -1);
            return calendar.getTimeInMillis();
        }
    
        /**
         * 时间戳转字符串
         *
         * @param timestamp 毫秒级时间戳
         * @param zoneId    如 GMT+8或UTC+08:00
         * @return
         */
        public static String timestampToStr(long timestamp, String zoneId) {
            ZoneId timezone = ZoneId.of(zoneId);
            LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), timezone);
            return localDateTime.toString();
        }
    
        public static void main(String[] args) {
            Long currentTime = System.currentTimeMillis();
            System.out.println("Current Time : " + currentTime + " = " + timestampToStr(currentTime, "GMT+8"));
            Long dailyStart = getDailyStartTime(currentTime, "GMT+8:00");
            Long dailyEnd = getDailyEndTime(currentTime, "GMT+8:00");
            Long monthStart = getMonthStartTime(currentTime, "GMT+8:00");
            Long monthEnd = getMonthEndTime(currentTime, "GMT+8:00");
            Long yearStart = getYearStartTime(currentTime, "GMT+8:00");
            Long yearEnd = getYearEndTime(currentTime, "GMT+8:00");
    
            System.out.println("Daily Start : " + dailyStart + " = " + timestampToStr(dailyStart, "GMT+8") + " Daily End : " + dailyEnd + " = " + timestampToStr(dailyEnd, "GMT+8"));
            System.out.println("Month Start : " + monthStart + " = " + timestampToStr(monthStart, "GMT+8") + " Month End : " + monthEnd + " = " + timestampToStr(monthEnd, "GMT+8"));
            System.out.println("Year Start : " + yearStart + " = " + timestampToStr(yearStart, "GMT+8") + " Year End : " + yearEnd + " = " + timestampToStr(yearEnd, "GMT+8"));
        }
    }
    

    效果

  • 相关阅读:
    为什么说 Java 程序员必须掌握 Spring Boot ?(转)
    Vert.x 之 HelloWorld
    Vert.x Web 文档手册
    Vert.x Core 文档手册
    Android数据存储五种方式总结
    设置简单的定时
    自定义dialog
    Android DrawerLayout 高仿QQ5.2双向侧滑菜单
    Fragments碎片
    理解Fragment生命周期
  • 原文地址:https://www.cnblogs.com/lingyejun/p/11298186.html
Copyright © 2011-2022 走看看