摘要:最近在做統計相關的功能的時候涉及到了獲取當天的開始和結束的時間戳當月和當年的開始結束時間戳,特此記錄,以作備忘。
最近在做統計相關的功能的時候涉及到了獲取當天的開始和結束的時間戳、當月和當年的開始結束時間戳,特此記錄,以作備忘。
相關代碼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")); } }效果
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75787.html
方法一: 使用Javascript語言,將時間戳轉換為類似新浪微博的時間的表示方法。要求轉換規則:1分鐘以內顯示為:剛剛1小時以內顯示為:N分鐘前當天以內顯示為:今天 N點N分(如:今天 22:33)昨天時間顯示為:昨天 N點N分(如:昨天 10:15)當年以內顯示為:N月N日 N點N分(如:02月03日 09:33)今年以前顯示為:N年N月N日 N點N分(如:2000年09月18日 15:59)...
摘要:前言前面一篇文章寫了如何安全的使用里面介紹了如何處理日期時間,以及如何保證線程安全,及其介紹了在中的處理時間日期默認就線程安全的類。引入了全新的日期時間格式工具,線程安全而且使用方便。 前言 前面一篇文章寫了《SimpleDateFormat 如何安全的使用?》, 里面介紹了 SimpleDateFormat 如何處理日期/時間,以及如何保證線程安全,及其介紹了在 Java 8 中的處...
摘要:處理日期日歷和時間的不足之處將設定為可變類型,以及的非線程安全使其應用非常受限。最完整的日期時間,包含時區和相對或格林威治的時差。獲取當前的日期中的用于表示當天日期。 簡介 伴隨 lambda表達式、streams 以及一系列小優化,Java 8 推出了全新的日期時間API。 Java處理日期、日歷和時間的不足之處:將 java.util.Date 設定為可變類型,以及 SimpleD...
摘要:用了一段時間的開發項目,也是第一次用來開發項目,所有有許多相關的知識點需要總結,本文所介紹的的日期時間處理就是最近用到的,希望對各位有所幫助,也同時作為自己的筆記儲存。提供了等模塊用于處理日期和時間,較為常用的還是模塊。 用了一段時間的django開發web項目,也是第一次用python來開發項目,所有有許多相關的知識點需要總結,本文所介紹的python的日期時間處理就是最近用到的,希...
閱讀 3241·2023-04-25 20:35
閱讀 3606·2019-08-30 15:54
閱讀 1982·2019-08-30 15:43
閱讀 2169·2019-08-29 15:14
閱讀 1880·2019-08-29 11:17
閱讀 3372·2019-08-26 13:36
閱讀 685·2019-08-26 10:15
閱讀 2816·2019-08-23 15:41