摘要:最近在做統(tǒng)計(jì)相關(guān)的功能的時(shí)候涉及到了獲取當(dāng)天的開始和結(jié)束的時(shí)間戳當(dāng)月和當(dāng)年的開始結(jié)束時(shí)間戳,特此記錄,以作備忘。
最近在做統(tǒng)計(jì)相關(guān)的功能的時(shí)候涉及到了獲取當(dāng)天的開始和結(jié)束的時(shí)間戳、當(dāng)月和當(dāng)年的開始結(jié)束時(shí)間戳,特此記錄,以作備忘。
相關(guān)代碼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 { /** * 獲取指定某一天的開始時(shí)間戳 * * @param timeStamp 毫秒級(jí)時(shí)間戳 * @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(); } /** * 獲取指定某一天的結(jié)束時(shí)間戳 * * @param timeStamp 毫秒級(jí)時(shí)間戳 * @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(); } /** * 獲取當(dāng)月開始時(shí)間戳 * * @param timeStamp 毫秒級(jí)時(shí)間戳 * @param timeZone 如 GMT+8:00 * @return */ public static Long getMonthStartTime(Long timeStamp, String timeZone) { Calendar calendar = Calendar.getInstance();// 獲取當(dāng)前日期 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);// 設(shè)置為1號(hào),當(dāng)前日期既為本月第一天 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(); } /** * 獲取當(dāng)月的結(jié)束時(shí)間戳 * * @param timeStamp 毫秒級(jí)時(shí)間戳 * @param timeZone 如 GMT+8:00 * @return */ public static Long getMonthEndTime(Long timeStamp, String timeZone) { Calendar calendar = Calendar.getInstance();// 獲取當(dāng)前日期 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));// 獲取當(dāng)前月最后一天 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(); } /** * 獲取當(dāng)年的開始時(shí)間戳 * * @param timeStamp 毫秒級(jí)時(shí)間戳 * @param timeZone 如 GMT+8:00 * @return */ public static Long getYearStartTime(Long timeStamp, String timeZone) { Calendar calendar = Calendar.getInstance();// 獲取當(dāng)前日期 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(); } /** * 獲取當(dāng)年的最后時(shí)間戳 * * @param timeStamp 毫秒級(jí)時(shí)間戳 * @param timeZone 如 GMT+8:00 * @return */ public static Long getYearEndTime(Long timeStamp, String timeZone) { Calendar calendar = Calendar.getInstance();// 獲取當(dāng)前日期 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(); } /** * 時(shí)間戳轉(zhuǎn)字符串 * * @param timestamp 毫秒級(jí)時(shí)間戳 * @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")); } }效果
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75787.html
方法一: 使用Javascript語言,將時(shí)間戳轉(zhuǎn)換為類似新浪微博的時(shí)間的表示方法。要求轉(zhuǎn)換規(guī)則:1分鐘以內(nèi)顯示為:剛剛1小時(shí)以內(nèi)顯示為:N分鐘前當(dāng)天以內(nèi)顯示為:今天 N點(diǎn)N分(如:今天 22:33)昨天時(shí)間顯示為:昨天 N點(diǎn)N分(如:昨天 10:15)當(dāng)年以內(nèi)顯示為:N月N日 N點(diǎn)N分(如:02月03日 09:33)今年以前顯示為:N年N月N日 N點(diǎn)N分(如:2000年09月18日 15:59)...
摘要:前言前面一篇文章寫了如何安全的使用里面介紹了如何處理日期時(shí)間,以及如何保證線程安全,及其介紹了在中的處理時(shí)間日期默認(rèn)就線程安全的類。引入了全新的日期時(shí)間格式工具,線程安全而且使用方便。 前言 前面一篇文章寫了《SimpleDateFormat 如何安全的使用?》, 里面介紹了 SimpleDateFormat 如何處理日期/時(shí)間,以及如何保證線程安全,及其介紹了在 Java 8 中的處...
摘要:處理日期日歷和時(shí)間的不足之處將設(shè)定為可變類型,以及的非線程安全使其應(yīng)用非常受限。最完整的日期時(shí)間,包含時(shí)區(qū)和相對(duì)或格林威治的時(shí)差。獲取當(dāng)前的日期中的用于表示當(dāng)天日期。 簡介 伴隨 lambda表達(dá)式、streams 以及一系列小優(yōu)化,Java 8 推出了全新的日期時(shí)間API。 Java處理日期、日歷和時(shí)間的不足之處:將 java.util.Date 設(shè)定為可變類型,以及 SimpleD...
摘要:獲取當(dāng)天是幾號(hào)獲取當(dāng)天是星期幾獲取本月的第一天取本月最后一天是不是很贊提供時(shí)分秒不提供年月日,也是線程安全并且不可變類。樣例獲取當(dāng)前的小時(shí)小時(shí)數(shù)加結(jié)果包含年月日時(shí)分秒,精確到納秒級(jí)別,同樣是線程安全并且不可變類。 java.util.Date 包含有年月日時(shí)分秒,精確到毫秒級(jí)別。官方解釋: // The class Date represents a specific instant ...
摘要:用了一段時(shí)間的開發(fā)項(xiàng)目,也是第一次用來開發(fā)項(xiàng)目,所有有許多相關(guān)的知識(shí)點(diǎn)需要總結(jié),本文所介紹的的日期時(shí)間處理就是最近用到的,希望對(duì)各位有所幫助,也同時(shí)作為自己的筆記儲(chǔ)存。提供了等模塊用于處理日期和時(shí)間,較為常用的還是模塊。 用了一段時(shí)間的django開發(fā)web項(xiàng)目,也是第一次用python來開發(fā)項(xiàng)目,所有有許多相關(guān)的知識(shí)點(diǎn)需要總結(jié),本文所介紹的python的日期時(shí)間處理就是最近用到的,希...
閱讀 3251·2023-04-25 20:35
閱讀 3612·2019-08-30 15:54
閱讀 1992·2019-08-30 15:43
閱讀 2183·2019-08-29 15:14
閱讀 1889·2019-08-29 11:17
閱讀 3380·2019-08-26 13:36
閱讀 695·2019-08-26 10:15
閱讀 2835·2019-08-23 15:41