java日期格式定义(获取多种日期格式)

该系列为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(), "dd"); } /** * 获取指定日期是星期几 * * @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; } /** * 如果endDateStr>startDateStr,返回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; } /** * 如果startDate>endDate,返回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)

本文仅供个人记录,大家可以借鉴,每行代码都是自己手打,亲测可直接粘贴执行,如有任何问题可在评论区提问,欢迎大家交流。

编辑人:程序幻境

码字不易,不喜勿踩

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。