tft每日頭條

 > 科技

 > java日期格式定義

java日期格式定義

科技 更新时间:2024-09-27 12:05:58

  該系列為Java工具類系列,主要展示100個常用的java工具類。

  此文重點講述:字符串之個性化格式處理。

  一、日期工具類(本文重點)

  import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * @ClassName: DateUtils * @Description: Java7日期工具類 * @Author: dyh * @Date: 2022/11/17 17:00 */ public class DateUtils { /** * 顯示年月日時分秒,例如 2015-08-11 09:51:53. */ public static final String DATETIME_pattern = yyyy-MM-dd HH:mm:ss /** * 顯示年月日時分,例如 2015-08-11 09:51. */ public static final String NO_SECOND_DATETIME_PATTERN = yyyy-MM-dd HH:mm /** * 僅顯示年月日,例如 2015-08-11. */ public static final String DATE_PATTERN = yyyy-MM-dd /** * 僅顯示時分秒,例如 09:51:53. */ public static final String TIME_PATTERN = HH:mm:ss /** * 僅顯示年(無符号),例如 2015. */ private static final String YEAR_PATTERN = yyyy /** * 一天的開始時間,僅顯示時分秒 */ private static final String START_TIME = 00:00:00 /** * 一天的結束時間,僅顯示時分秒 */ private static final String END_TIME = 23:59:59 /** * 每天的毫秒數. */ public static final long MILLISECONDS_PER_DAY = 86400000L; /** * 每小時毫秒數. */ public static final long MILLISECONDS_PER_HOUR = 3600000L; /** * 每秒的毫秒數. */ public static final long MILLISECONDS_PER_SECONDS = 1000L; /** * 星期日; */ public static final String SUNDAY = 星期日 /** * 星期一; */ public static final String MONDAY = 星期一 /** * 星期二; */ public static final String TUESDAY = 星期二 /** * 星期三; */ public static final String WEDNESDAY = 星期三 /** * 星期四; */ public static final String THURSDAY = 星期四 /** * 星期五; */ public static final String FRIDAY = 星期五 /** * 星期六; */ public static final String SATURDAY = 星期六 /** * 獲取當前日期和時間字符串. * * @return String 日期時間字符串,例如 2022-11-11 17:00:00 */ public static String getDateTimeStr() { return format(new Date(), DATETIME_PATTERN); } /** * 獲取當前日期字符串. * * @return String 日期字符串,例如2022-11-11 */ public static String getDateStr() { return format(new Date(), DATE_PATTERN); } /** * 獲取當前時間字符串. * * @return String 時間字符串,例如 17:00:00 */ public static String getTimeStr() { return format(new Date(), TIME_PATTERN); } /** * 獲取當前年份字符串. * * @return String 當前年份字符串,例如 2022 */ public static String getYearStr() { return format(new Date(), YEAR_PATTERN); } /** * 獲取當前天數字符串. * * @return String 當前天數字符串,例如 11 */ public static String getDayStr() { return format(new Date(), ); } /** * 獲取指定日期是星期幾 * * @param date 日期 * @return String 星期幾 */ public static String getDayOfWeekStr(Date date) { String[] weekOfDays = {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}; Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int num = calendar.get(Calendar.DAY_OF_WEEK) - 1; return weekOfDays[num]; } /** * 獲取日期時間字符串 * * @param date 需要轉化的日期時間 * @param pattern 時間格式 * @return String 日期時間字符串,例如 2022-11-11 17:00:00 */ public static String format(Date date, String pattern) { return new SimpleDateFormat(pattern).format(date); } /** * 時間戳轉換為日期時間字符串 * * @param timestamp 時間戳 * @param pattern 日期格式 例如DATETIME_PATTERN * @return String 日期時間字符串,例如 2022-11-11 17:00:00 */ public static String getDateTimeStr(long timestamp, String pattern) { return new SimpleDateFormat(pattern).format(timestamp); } /** * 日期字符串轉換為日期(java.util.Date) * * @param dateStr 日期字符串 * @param pattern 日期格式 例如DATETIME_PATTERN * @return Date 日期 */ public static Date parse(String dateStr, String pattern) { Date date = null; SimpleDateFormat dateFormat = new SimpleDateFormat(pattern); dateFormat.setLenient(false); try { date = dateFormat.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return date; } /** * 獲取當前日期num月數之後的日期. * * @param num 間隔月數(負數表示之前) * @return Date 日期 */ public static Date addMonths(Date date, int num) { return add(date, num, Calendar.MONTH); } /** * 獲取當前日期指定月數之後的日期. * * @param num 間隔月數(負數表示之前) * @return Date 日期 */ public static Date addMonths(int num) { return add(new Date(), num, Calendar.MONTH); } /** * 獲取指定日期num天數之後的日期. * * @param date 日期 * @param num 天數(負數表示之前) * @return Date 新的日期 */ public static Date addDays(Date date, int num) { return add(date, num, Calendar.DAY_OF_MONTH); } /** * 獲取當前日期指定天數之後的日期. * * @param num 天數(負數表示之前) * @return Date 新的日期 */ public static Date addDays(int num) { return add(new Date(), num, Calendar.DAY_OF_MONTH); } /** * 獲取指定日期num小時之後的日期. * * @param date 日期 * @param num 小時數(負數表示之前) * @return Date 新的日期 */ public static Date addHours(Date date, int num) { return add(date, num, Calendar.HOUR_OF_DAY); } /** * 獲取當前日期指定小時之後的日期. * * @param num 小時數(負數表示之前) * @return Date 新的日期 */ public static Date addHours(int num) { return add(new Date(), num, Calendar.HOUR_OF_DAY); } /** * 獲取指定日期num分鐘之後的日期. * * @param date 日期 * @param num 分鐘數(負數表示之前) * @return Date 新的日期 */ public static Date addMinutes(Date date, int num) { return add(date, num, Calendar.MINUTE); } /** * 獲取當前日期指定分鐘之後的日期. * * @param num 分鐘數(負數表示之前) * @return Date 新的日期 */ public static Date addMinutes(int num) { return add(new Date(), num, Calendar.MINUTE); } /** * 獲取指定日期num秒鐘之後的日期. * * @param date 日期 * @param num 秒鐘數(負數表示之前) * @return Date 新的日期 */ public static Date addSeconds(Date date, int num) { return add(date, num, Calendar.SECOND); } /** * 獲取當前日期指定秒鐘之後的日期. * * @param num 秒鐘數(負數表示之前) * @return Date 新的日期 */ public static Date addSeconds(int num) { return add(new Date(), num, Calendar.SECOND); } /** * 獲取指定日期num毫秒之後的日期. * * @param date 日期 * @param num 毫秒數(負數表示之前) * @return Date 新的日期 */ public static Date addMilliSeconds(Date date, int num) { return add(date, num, Calendar.MILLISECOND); } /** * 獲取當前日期指定毫秒之後的日期. * * @param num 毫秒數(負數表示之前) * @return Date 新的日期 */ public static Date addMilliSeconds(int num) { return add(new Date(), num, Calendar.MILLISECOND); } /** * 獲取當前日期指定數量日期時間單位之後的日期. * * @param date 日期 * @param num 數量 * @param unit 日期時間單位 * @return Date 新的日期 */ public static Date add(Date date, int num, int unit) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(unit, num); return calendar.getTime(); } /** * 計算兩個日期之間相隔年數. * * @param startDate 開始日期 * @param endDate 結束日期 * @return int 相隔年數,向下取整 */ public static int getYearsBetween(Date startDate, Date endDate) { return getMonthsBetween(startDate, endDate) / 12; } /** * 計算兩個日期之間相隔月數. * * @param startDate 開始日期 * @param endDate 結束日期 * @return int 相隔月數,向下取整 */ public static int getMonthsBetween(Date startDate, Date endDate) { int months; int flag = 0; Calendar startCalendar = Calendar.getInstance(); startCalendar.setTime(startDate); Calendar endCalendar = Calendar.getInstance(); endCalendar.setTime(endDate); if (endCalendar.equals(startCalendar)) { return 0; } if (startCalendar.after(endCalendar)) { Calendar temp = startCalendar; startCalendar = endCalendar; endCalendar = temp; } if (endCalendar.get(Calendar.DAY_OF_MONTH) startCalendar.get(Calendar.DAY_OF_MONTH)) { flag = 1; } if (endCalendar.get(Calendar.YEAR) startCalendar.get(Calendar.YEAR)) { months = ((endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR)) * 12 endCalendar.get(Calendar.MONTH) - flag) - startCalendar.get(Calendar.MONTH); } else { months = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH) - flag; } return months; } /** * 計算兩個日期之間相隔天數. * * @param startDate 開始日期 * @param endDate 結束日期 * @return long 相隔天數,向下取整 */ public static long getDaysBetween(Date startDate, Date endDate) { return (endDate.getTime() - startDate.getTime()) / MILLISECONDS_PER_DAY; } /** * 計算兩個日期之間相隔小時數. * * @param startDate 開始日期 * @param endDate 結束日期 * @return long 相隔小時數,向下取整 */ public static long getHoursBetween(Date startDate, Date endDate) { return (endDate.getTime() - startDate.getTime()) / MILLISECONDS_PER_HOUR; } /** * 計算兩個日期之間相隔秒數. * * @param startDate 開始日期 * @param endDate 結束日期 * @return long 相隔秒數,向下取整 */ public static long getSecondsBetween(Date startDate, Date endDate) { return (endDate.getTime() - startDate.getTime()) / MILLISECONDS_PER_SECONDS; } /** * 将 Date 日期轉化為 Calendar 類型日期. * * @param date 指定日期 * @return Calendar Calendar對象 */ public static Calendar getCalendar(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar; } /** * 得到UTC時間,類型為字符串,格式為yyyy-MM-dd HH:mm * 如果獲取失敗,返回null * * @return */ public static String getUTCTimeStr() { StringBuffer UTCTimeBuffer = new StringBuffer(); // 1、取得本地時間: Calendar cal = Calendar.getInstance(); // 2、取得時間偏移量: int zoneOffset = cal.get(Calendar.ZONE_OFFSET); // 3、取得夏令時差: int dstOffset = cal.get(Calendar.DST_OFFSET); // 4、從本地時間裡扣除這些差量,即可以取得UTC時間: cal.add(Calendar.MILLISECOND, -(zoneOffset dstOffset)); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH) 1; int day = cal.get(Calendar.DAY_OF_MONTH); int hour = cal.get(Calendar.HOUR_OF_DAY); int minute = cal.get(Calendar.MINUTE); UTCTimeBuffer.append(year).append().append(month).append().append(day); UTCTimeBuffer.append().append(hour).append().append(minute); try { SimpleDateFormat sdf = new SimpleDateFormat(NO_SECOND_DATETIME_PATTERN); sdf.parse(UTCTimeBuffer.toString()); return UTCTimeBuffer.toString(); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 将Timestamp轉換為yyyy-MM-dd HH:mm:ss格式字符串 * * @param timestamp * @return */ public static String timestampToStr(Timestamp timestamp) { return timestamp.toString().substring(0, 19); } /** * 比較傳進來的日期是否大于當前日期,如果傳進來的日期大于當前日期則返回true,否則返回false * * @param dateStr 日期字符串 * @param pattern 日期格式 * @return boolean */ public static boolean compareNowDate(String dateStr, String pattern) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); try { Date date = simpleDateFormat.parse(dateStr); return date.after(new Date()); } catch (ParseException e) { e.printStackTrace(); } return false; } /** * 如果endDateStrstartDateStr,返回true,否則返回false * * @param startDateStr 開始日期字符串 * @param endDateStr 結束日期字符串 * @param pattern 日期格式 * @return boolean */ public static boolean compareDate(String startDateStr, String endDateStr, String pattern) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); try { Date startDate = simpleDateFormat.parse(startDateStr); Date endDate = simpleDateFormat.parse(endDateStr); return endDate.after(startDate); } catch (ParseException e) { e.printStackTrace(); } return false; } /** * 如果startDateendDate,返回true,否則返回false * * @param startDate 開始日期字符串 * @param endDate 結束日期字符串 * @return boolean */ public static boolean compareDate(Date startDate, Date endDate) { return endDate.after(startDate); } /** * 判斷日期是否合法 * * @param dateStr yyyy-MM-dd HH:mm:ss格式日期字符串 * @return */ public static boolean isValidDate(String dateStr) { boolean convertSuccess = true; // 指定日期格式為四位年/兩位月份/兩位日期 SimpleDateFormat format = new SimpleDateFormat(DATETIME_PATTERN); try { format.setLenient(false); format.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); convertSuccess = false; } return convertSuccess; } /** * 獲取本月的第一天 * * @return Calendar 日曆 */ public static Calendar getStartDayOfMonth(Date date) { Calendar calendar = Calendar.getInstance(Locale.CHINA); calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar; } /** * 獲取本月的最後一天 * * @return Calendar 日曆 */ public static Calendar getEndDayOfMonth(Date date) { Calendar calendar = Calendar.getInstance(Locale.CHINA); calendar.setTime(date); int i = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, i); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return calendar; } }

  二、日期基礎類介紹

  Java中,有四個操作日期類型的基本類:

  1) Date 2)Calendar 3)SimpleDateFormat 4)DateFormat

  1、Date類 Date表示的是特定的瞬間,精确到毫秒。1秒=1000毫秒,1毫秒=1000微秒。

  java日期格式定義(獲取多種日期格式)(1)

  Date類常用方法

  2、Calendar類 Calendar提供了獲取和設置各種日曆字段的方法;Calendar提供了一個類方法getInstance。一個calendar的實例是系統時間的抽象表示,可以從中獲取年月日等詳細信息。

  java日期格式定義(獲取多種日期格式)(2)

  Calendar

  3、DateFormat類 DateFormat是日期/時間格式化子類的抽象類,可以格式化并解析日期或時間。

  java日期格式定義(獲取多種日期格式)(3)

  DateFormat

  4、SimpleDateFormat類通過DateFormat的子類SimpleDateFormat類可以得到需要的日期顯示格式。

  java日期格式定義(獲取多種日期格式)(4)

  SimpleDateFormat

  java日期格式定義(獲取多種日期格式)(5)

  本文僅供個人記錄,大家可以借鑒,每行代碼都是自己手打,親測可直接粘貼執行,如有任何問題可在評論區提問,歡迎大家交流。

  編輯人:程序幻境

  碼字不易,不喜勿踩

  ,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved