package com.irrigation.icl.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.TimeZone; public class DateUtils { /** * 当前时间,转换为{@link Date}对象 * * @return 当前时间 */ public static Date date() { return new Date(); } /** * 创建Calendar对象,时间为默认时区的当前时间 * * @return Calendar对象 * @since 4.6.6 */ public static Calendar calendar() { return Calendar.getInstance(); } /** * 转换为Calendar对象 * * @param date 日期对象 * @return Calendar对象 */ public static Calendar calendar(Date date) { return calendar(date.getTime()); } /** * 转换为Calendar对象 * * @param millis 时间戳 * @return Calendar对象 */ public static Calendar calendar(long millis) { final Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(millis); return cal; } private static Calendar toCalendar(Date date) { return toCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT), date); } private static Calendar toCalendar(TimeZone zone, Locale locale, Date date) { if (null == locale) { locale = Locale.getDefault(Locale.Category.FORMAT); } final Calendar cal = (null != zone) ? Calendar.getInstance(zone, locale) : Calendar.getInstance(locale); cal.setFirstDayOfWeek(Calendar.MONDAY); cal.setTime(date); return cal; } /** * 当前时间的时间戳 * * @return 时间 */ public static long currentTimeMillis() { return System.currentTimeMillis(); } /** * 当前时间的时间戳(秒) * * @return 当前时间秒数 */ public static long currentSeconds() { return System.currentTimeMillis() / 1000; } /** * 获得年的部分 * * @param date 日期 * @return 年的部分 */ public static int year(Date date) { return toCalendar(date).get(Calendar.YEAR); } /** * 获得指定日期所属季度,从1开始计数 * * @param date 日期 * @return 第几个季度 * @since 4.1.0 */ public static int quarter(Date date) { return month(date) / 3 + 1; } /** * 获得月份,从0开始计数 * * @param date 日期 * @return 月份,从0开始计数 */ public static int month(Date date) { return toCalendar(date).get(Calendar.MONTH); } /** * 获得指定日期是所在年份的第几周
* * @param date 日期 * @return 周 */ public static int weekOfYear(Date date) { return toCalendar(date).get(Calendar.WEEK_OF_YEAR); } /** * 获得指定日期是所在月份的第几周
* * @param date 日期 * @return 周 */ public static int weekOfMonth(Date date) { return toCalendar(date).get(Calendar.WEEK_OF_MONTH); } /** * 获得指定日期是这个日期所在月份的第几天
* * @param date 日期 * @return 天 */ public static int dayOfMonth(Date date) { return toCalendar(date).get(Calendar.DAY_OF_MONTH); } /** * 获得指定日期是星期几,1表示周日,2表示周一 * * @param date 日期 * @return 天 */ public static int dayOfWeek(Date date) { return toCalendar(date).get(Calendar.DAY_OF_WEEK); } /** * 获得指定日期的小时数部分
* * @param date 日期 * @return 小时数 */ public static int hour(Date date) { return toCalendar(date).get(Calendar.HOUR_OF_DAY); } /** * 获得指定日期的分钟数部分
* 例如:10:04:15.250 =》 4 * * @param date 日期 * @return 分钟数 */ public static int minute(Date date) { return toCalendar(date).get(Calendar.MINUTE); } /** * 获得指定日期的秒数部分
* * @param date 日期 * @return 秒数 */ public static int second(Date date) { return toCalendar(date).get(Calendar.SECOND); } /** * 获得指定日期的毫秒数部分
* * @param date 日期 * @return 毫秒数 */ public static int millsecond(Date date) { return toCalendar(date).get(Calendar.MILLISECOND); } /** * 当前时间,格式 yyyy-MM-dd HH:mm:ss * * @return 当前时间的标准形式字符串 */ public static String now() { return formatDateTime(new Date()); } /** * 当前日期,格式 yyyy-MM-dd * * @return 当前日期的标准形式字符串 */ public static String today() { return formatDate(new Date()); } // ------------------------------------ Format start ---------------------------------------------- /** * 根据特定格式格式化日期 * * @param date 被格式化的日期 * @param format 日期格式,常用格式见: * @return 格式化后的字符串 */ public static String format(Date date, String format) { if (null == date || ObjectUtils.stringIsEmpty(format)) { return null; } return DateFormat.getInstance(format).format(date); } /** * 格式化日期时间
* 格式 yyyy-MM-dd HH:mm:ss * * @param date 被格式化的日期 * @return 格式化后的日期 */ public static String formatDateTime(Date date) { if (null == date) { return null; } return DateFormat.NORM_DATETIME_FORMAT.format(date); } /** * 格式化日期部分(不包括时间)
* 格式 yyyy-MM-dd * * @param date 被格式化的日期 * @return 格式化后的字符串 */ public static String formatDate(Date date) { if (null == date) { return null; } return DateFormat.NORM_DATE_FORMAT.format(date); } /** * 格式化时间
* 格式 HH:mm:ss * * @param date 被格式化的日期 * @return 格式化后的字符串 * @since 3.0.1 */ public static String formatTime(Date date) { if (null == date) { return null; } return DateFormat.NORM_TIME_FORMAT.format(date); } // ------------------------------------ Format end ---------------------------------------------- // ------------------------------------ Parse start ---------------------------------------------- /** * 构建DateTime对象 * * @param dateStr Date字符串 * @param format 格式 * @return DateTime对象 */ public static Date parse(String dateStr, String format) { try { return DateFormat.getInstance(format).parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 将特定格式的日期转换为Date对象 * * @param dateStr 特定格式的日期 * @param format 格式,例如yyyy-MM-dd * @param locale 区域信息 * @return 日期对象 * @since 4.5.18 */ public static Date parse(String dateStr, String format, Locale locale) { try { return DateFormat.getInstance(format, locale).parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 格式yyyy-MM-dd HH:mm:ss * * @param dateString 标准形式的时间字符串 * @return 日期对象 */ public static Date parseDateTime(String dateString) { return parse(dateString, DatePattern.NORM_DATETIME_PATTERN); } /** * 解析格式为yyyy-MM-dd的日期,忽略时分秒 * * @param dateString 标准形式的日期字符串 * @return 日期对象 */ public static Date parseDate(String dateString) { return parse(dateString, DatePattern.NORM_DATE_PATTERN); } /** * 解析时间,格式HH:mm:ss,日期部分默认为1970-01-01 * * @param timeString 标准形式的日期字符串 * @return 日期对象 */ public static Date parseTime(String timeString) { return parse(timeString, DatePattern.NORM_TIME_PATTERN); } // ------------------------------------ Parse end ---------------------------------------------- /** * date 转换为 long * * @param date * @return */ public static Long dateToLong(Date date) { return ObjectUtils.isNull(date) ? null : date.getTime(); } }