Java-Class-C:cn.hutool.core.date.DateUtil

2020-12-13 04:04

阅读:440

标签:当前日期   支持   dateutil   日期转换   第一天   相同   style   image   method   

ylbtech-Java-Class-C:cn.hutool.core.date.DateUtil

 

1.返回顶部
 
2.返回顶部
1.1、
import cn.hutool.core.date.DateUtil;
1.2、
String dateStr = DateUtil.formatDateTime(new Date());
1.3、
3.返回顶部
 
4.返回顶部
1、
package cn.hutool.core.date;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedHashSet;
import java.util.List;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.format.DateParser;
import cn.hutool.core.date.format.DatePrinter;
import cn.hutool.core.date.format.FastDateFormat;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.StrUtil;

/**
 * 时间工具类
 * 
 * @author xiaoleilu
 */
public class DateUtil {

    /**
     * 转换为{@link DateTime}对象
     * 
     * @return 当前时间
     */
    public static DateTime date() {
        return new DateTime();
    }

    /**
     * {@link Date}类型时间转为{@link DateTime}
     * 
     * @param date Long类型Date(Unix时间戳)
     * @return 时间对象
     * @since 3.0.7
     */
    public static DateTime date(Date date) {
        if (date instanceof DateTime) {
            return (DateTime) date;
        }
        return new DateTime(date);
    }

    /**
     * Long类型时间转为{@link DateTime}
* 只支持毫秒级别时间戳,如果需要秒级别时间戳,请自行×1000 * *
@param date Long类型Date(Unix时间戳) * @return 时间对象 */ public static DateTime date(long date) { return new DateTime(date); } /** * {@link Calendar}类型时间转为{@link DateTime} * * @param calendar {@link Calendar} * @return 时间对象 */ public static DateTime date(Calendar calendar) { return new DateTime(calendar); } /** * 转换为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; } /** * 当前时间,格式 yyyy-MM-dd HH:mm:ss * * @return 当前时间的标准形式字符串 */ public static String now() { return formatDateTime(new DateTime()); } /** * 当前时间的时间戳 * * @param isNano 是否为高精度时间 * @return 时间 */ public static long current(boolean isNano) { return isNano ? System.nanoTime() : System.currentTimeMillis(); } /** * 当前时间的时间戳(秒) * * @return 当前时间秒数 * @since 4.0.0 */ public static long currentSeconds() { return System.currentTimeMillis() / 1000; } /** * 当前日期,格式 yyyy-MM-dd * * @return 当前日期的标准形式字符串 */ public static String today() { return formatDate(new DateTime()); } // -------------------------------------------------------------- Part of Date start /** * 获得年的部分 * * @param date 日期 * @return 年的部分 */ public static int year(Date date) { return DateTime.of(date).year(); } /** * 获得指定日期所属季度 * * @param date 日期 * @return 第几个季度 * @deprecated 请使用{@link #quarter(Date)} */ @Deprecated public static int season(Date date) { return quarter(date); } /** * 获得指定日期所属季度,从1开始计数 * * @param date 日期 * @return 第几个季度 * @since 4.1.0 */ public static int quarter(Date date) { return DateTime.of(date).quarter(); } /** * 获得指定日期所属季度 * * @param date 日期 * @return 第几个季度枚举 * @since 4.1.0 */ public static Quarter quarterEnum(Date date) { return DateTime.of(date).quarterEnum(); } /** * 获得月份,从0开始计数 * * @param date 日期 * @return 月份,从0开始计数 */ public static int month(Date date) { return DateTime.of(date).month(); } /** * 获得月份 * * @param date 日期 * @return {@link Month} */ public static Month monthEnum(Date date) { return DateTime.of(date).monthEnum(); } /** * 获得指定日期是所在年份的第几周
* *
@param date 日期 * @return*/ public static int weekOfYear(Date date) { return DateTime.of(date).weekOfYear(); } /** * 获得指定日期是所在月份的第几周
* *
@param date 日期 * @return*/ public static int weekOfMonth(Date date) { return DateTime.of(date).weekOfMonth(); } /** * 获得指定日期是这个日期所在月份的第几天
* *
@param date 日期 * @return*/ public static int dayOfMonth(Date date) { return DateTime.of(date).dayOfMonth(); } /** * 获得指定日期是星期几,1表示周日,2表示周一 * * @param date 日期 * @return*/ public static int dayOfWeek(Date date) { return DateTime.of(date).dayOfWeek(); } /** * 获得指定日期是星期几 * * @param date 日期 * @return {@link Week} */ public static Week dayOfWeekEnum(Date date) { return DateTime.of(date).dayOfWeekEnum(); } /** * 获得指定日期的小时数部分
* *
@param date 日期 * @param is24HourClock 是否24小时制 * @return 小时数 */ public static int hour(Date date, boolean is24HourClock) { return DateTime.of(date).hour(is24HourClock); } /** * 获得指定日期的分钟数部分
* 例如:10:04:15.250 =》 4 * *
@param date 日期 * @return 分钟数 */ public static int minute(Date date) { return DateTime.of(date).minute(); } /** * 获得指定日期的秒数部分
* *
@param date 日期 * @return 秒数 */ public static int second(Date date) { return DateTime.of(date).second(); } /** * 获得指定日期的毫秒数部分
* *
@param date 日期 * @return 毫秒数 */ public static int millsecond(Date date) { return DateTime.of(date).millsecond(); } /** * 是否为上午 * * @param date 日期 * @return 是否为上午 */ public static boolean isAM(Date date) { return DateTime.of(date).isAM(); } /** * 是否为下午 * * @param date 日期 * @return 是否为下午 */ public static boolean isPM(Date date) { return DateTime.of(date).isPM(); } /** * @return 今年 */ public static int thisYear() { return year(date()); } /** * @return 当前月份 */ public static int thisMonth() { return month(date()); } /** * @return 当前月份 {@link Month} */ public static Month thisMonthEnum() { return monthEnum(date()); } /** * @return 当前日期所在年份的第几周 */ public static int thisWeekOfYear() { return weekOfYear(date()); } /** * @return 当前日期所在年份的第几周 */ public static int thisWeekOfMonth() { return weekOfMonth(date()); } /** * @return 当前日期是这个日期所在月份的第几天 */ public static int thisDayOfMonth() { return dayOfMonth(date()); } /** * @return 当前日期是星期几 */ public static int thisDayOfWeek() { return dayOfWeek(date()); } /** * @return 当前日期是星期几 {@link Week} */ public static Week thisDayOfWeekEnum() { return dayOfWeekEnum(date()); } /** * @param is24HourClock 是否24小时制 * @return 当前日期的小时数部分
*/ public static int thisHour(boolean is24HourClock) { return hour(date(), is24HourClock); } /** * @return 当前日期的分钟数部分
*/ public static int thisMinute() { return minute(date()); } /** * @return 当前日期的秒数部分
*/ public static int thisSecond() { return second(date()); } /** * @return 当前日期的毫秒数部分
*/ public static int thisMillsecond() { return millsecond(date()); } // -------------------------------------------------------------- Part of Date end /** * 获得指定日期年份和季节
* 格式:[20131]表示2013年第一季度 * *
@param date 日期 * @return Season ,类似于 20132 * @deprecated 请使用{@link #yearAndQuarter} 代替 */ @Deprecated public static String yearAndSeason(Date date) { return yearAndSeason(calendar(date)); } /** * 获得指定日期年份和季节
* 格式:[20131]表示2013年第一季度 * *
@param date 日期 * @return Quarter ,类似于 20132 */ public static String yearAndQuarter(Date date) { return yearAndQuarter(calendar(date)); } /** * 获得指定日期区间内的年份和季节
* *
@param startDate 起始日期(包含) * @param endDate 结束日期(包含) * @return Season列表 ,元素类似于 20132 * @deprecated 请使用{@link #yearAndQuarter} 代替 */ @Deprecated public static LinkedHashSet yearAndSeasons(Date startDate, Date endDate) { return yearAndQuarter(startDate, endDate); } /** * 获得指定日期区间内的年份和季节
* *
@param startDate 起始日期(包含) * @param endDate 结束日期(包含) * @return 季度列表 ,元素类似于 20132 */ public static LinkedHashSet yearAndQuarter(Date startDate, Date endDate) { if (startDate == null || endDate == null) { return new LinkedHashSet(0); } return yearAndQuarter(startDate.getTime(), endDate.getTime()); } /** * 获得指定日期区间内的年份和季节
* *
@param startDate 起始日期(包含) * @param endDate 结束日期(包含) * @return 季度列表 ,元素类似于 20132 * @since 4.1.15 */ public static LinkedHashSet yearAndQuarter(long startDate, long endDate) { LinkedHashSet quarters = new LinkedHashSet(); final Calendar cal = calendar(startDate); while (startDate endDate) { // 如果开始时间超出结束时间,让结束时间为开始时间,处理完后结束循环 quarters.add(yearAndQuarter(cal)); cal.add(Calendar.MONTH, 3); startDate = cal.getTimeInMillis(); } return quarters; } // ------------------------------------ Format start ---------------------------------------------- /** * 根据特定格式格式化日期 * * @param date 被格式化的日期 * @param format 日期格式,常用格式见: {@link DatePattern} * @return 格式化后的字符串 */ public static String format(Date date, String format) { if (null == date || StrUtil.isBlank(format)) { return null; } return format(date, FastDateFormat.getInstance(format)); } /** * 根据特定格式格式化日期 * * @param date 被格式化的日期 * @param format {@link DatePrinter} 或 {@link FastDateFormat} * @return 格式化后的字符串 */ public static String format(Date date, DatePrinter format) { if (null == format || null == date) { return null; } return format.format(date); } /** * 根据特定格式格式化日期 * * @param date 被格式化的日期 * @param format {@link SimpleDateFormat} * @return 格式化后的字符串 */ public static String format(Date date, DateFormat format) { if (null == format || null == date) { return null; } return format.format(date); } /** * 格式化日期时间
* 格式 yyyy-MM-dd HH:mm:ss * *
@param date 被格式化的日期 * @return 格式化后的日期 */ public static String formatDateTime(Date date) { if (null == date) { return null; } return DatePattern.NORM_DATETIME_FORMAT.format(date); } /** * 格式化日期部分(不包括时间)
* 格式 yyyy-MM-dd * *
@param date 被格式化的日期 * @return 格式化后的字符串 */ public static String formatDate(Date date) { if (null == date) { return null; } return DatePattern.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 DatePattern.NORM_TIME_FORMAT.format(date); } /** * 格式化为Http的标准日期格式 * * @param date 被格式化的日期 * @return HTTP标准形式日期字符串 */ public static String formatHttpDate(Date date) { if (null == date) { return null; } return DatePattern.HTTP_DATETIME_FORMAT.format(date); } /** * 格式化为中文日期格式,如果isUppercase为false,则返回类似:2018年10月24日,否则返回二〇一八年十月二十四日 * * @param date 被格式化的日期 * @param isUppercase 是否采用大写形式 * @return 中文日期字符串 * @since 4.1.19 */ public static String formatChineseDate(Date date, boolean isUppercase) { if (null == date) { return null; } String format = DatePattern.CHINESE_DATE_FORMAT.format(date); if (isUppercase) { final StringBuilder builder = StrUtil.builder(format.length()); builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(0, 1)), false)); builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(1, 2)), false)); builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(2, 3)), false)); builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(3, 4)), false)); builder.append(format.substring(4, 5)); builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(5, 7)), false)); builder.append(format.substring(7, 8)); builder.append(Convert.numberToChinese(Integer.parseInt(format.substring(8, 10)), false)); builder.append(format.substring(10)); format = builder.toString().replace(‘零‘, ‘〇‘); } return format; } // ------------------------------------ Format end ---------------------------------------------- // ------------------------------------ Parse start ---------------------------------------------- /** * 构建DateTime对象 * * @param dateStr Date字符串 * @param dateFormat 格式化器 {@link SimpleDateFormat} * @return DateTime对象 */ public static DateTime parse(String dateStr, DateFormat dateFormat) { return new DateTime(dateStr, dateFormat); } /** * 构建DateTime对象 * * @param dateStr Date字符串 * @param parser 格式化器,{@link FastDateFormat} * @return DateTime对象 */ public static DateTime parse(String dateStr, DateParser parser) { return new DateTime(dateStr, parser); } /** * 将特定格式的日期转换为Date对象 * * @param dateStr 特定格式的日期 * @param format 格式,例如yyyy-MM-dd * @return 日期对象 */ public static DateTime parse(String dateStr, String format) { return new DateTime(dateStr, format); } /** * 格式yyyy-MM-dd HH:mm:ss * * @param dateString 标准形式的时间字符串 * @return 日期对象 */ public static DateTime parseDateTime(String dateString) { dateString = normalize(dateString); return parse(dateString, DatePattern.NORM_DATETIME_FORMAT); } /** * 格式yyyy-MM-dd * * @param dateString 标准形式的日期字符串 * @return 日期对象 */ public static DateTime parseDate(String dateString) { dateString = normalize(dateString); return parse(dateString, DatePattern.NORM_DATE_FORMAT); } /** * 解析时间,格式HH:mm:ss,默认为1970-01-01 * * @param timeString 标准形式的日期字符串 * @return 日期对象 */ public static DateTime parseTime(String timeString) { timeString = normalize(timeString); return parse(timeString, DatePattern.NORM_TIME_FORMAT); } /** * 解析时间,格式HH:mm:ss,日期默认为今天 * * @param timeString 标准形式的日期字符串 * @return 日期对象 * @since 3.1.1 */ public static DateTime parseTimeToday(String timeString) { timeString = StrUtil.format("{} {}", today(), timeString); return parse(timeString, DatePattern.NORM_DATETIME_FORMAT); } /** * 解析UTC时间,格式为:yyyy-MM-dd‘T‘HH:mm:ss‘Z * * @param utcString UTC时间 * @return 日期对象 * @since 4.1.14 */ public static DateTime parseUTC(String utcString) { return parse(utcString, DatePattern.UTC_FORMAT); } /** * 将日期字符串转换为{@link DateTime}对象,格式:
*
    *
  1. yyyy-MM-dd HH:mm:ss
  2. *
  3. yyyy/MM/dd HH:mm:ss
  4. *
  5. yyyy.MM.dd HH:mm:ss
  6. *
  7. yyyy年MM月dd日 HH时mm分ss秒
  8. *
  9. yyyy-MM-dd
  10. *
  11. yyyy/MM/dd
  12. *
  13. yyyy.MM.dd
  14. *
  15. HH:mm:ss
  16. *
  17. HH时mm分ss秒
  18. *
  19. yyyy-MM-dd HH:mm
  20. *
  21. yyyy-MM-dd HH:mm:ss.SSS
  22. *
  23. yyyyMMddHHmmss
  24. *
  25. yyyyMMddHHmmssSSS
  26. *
  27. yyyyMMdd
  28. *
  29. EEE, dd MMM yyyy HH:mm:ss z
  30. *
  31. EEE MMM dd HH:mm:ss zzz yyyy
  32. *
* *
@param dateStr 日期字符串 * @return 日期 */ public static DateTime parse(String dateStr) { if (null == dateStr) { return null; } // 去掉两边空格并去掉中文日期中的“日”,以规范长度 dateStr = dateStr.trim().replace("日", ""); int length = dateStr.length(); if (Validator.isNumber(dateStr)) { // 纯数字形式 if (length == DatePattern.PURE_DATETIME_PATTERN.length()) { return parse(dateStr, DatePattern.PURE_DATETIME_FORMAT); } else if (length == DatePattern.PURE_DATETIME_MS_PATTERN.length()) { return parse(dateStr, DatePattern.PURE_DATETIME_MS_FORMAT); } else if (length == DatePattern.PURE_DATE_PATTERN.length()) { return parse(dateStr, DatePattern.PURE_DATE_FORMAT); } else if (length == DatePattern.PURE_TIME_PATTERN.length()) { return parse(dateStr, DatePattern.PURE_TIME_FORMAT); } } if (length == DatePattern.NORM_DATETIME_PATTERN.length() || length == DatePattern.NORM_DATETIME_PATTERN.length() + 1) { if(dateStr.contains("T")) { //UTC时间格式:类似2018-09-13T05:34:31 return parseUTC(dateStr); } return parseDateTime(dateStr); } else if (length == DatePattern.NORM_DATE_PATTERN.length()) { return parseDate(dateStr); } else if (length == DatePattern.NORM_TIME_PATTERN.length() || length == DatePattern.NORM_TIME_PATTERN.length() + 1) { return parseTimeToday(dateStr); } else if (length == DatePattern.NORM_DATETIME_MINUTE_PATTERN.length() || length == DatePattern.NORM_DATETIME_MINUTE_PATTERN.length() + 1) { return parse(normalize(dateStr), DatePattern.NORM_DATETIME_MINUTE_FORMAT); } else if (length >= DatePattern.NORM_DATETIME_MS_PATTERN.length() - 2) { return parse(normalize(dateStr), DatePattern.NORM_DATETIME_MS_FORMAT); } // 没有更多匹配的时间格式 throw new DateException("No format fit for date String [{}] !", dateStr); } // ------------------------------------ Parse end ---------------------------------------------- // ------------------------------------ Offset start ---------------------------------------------- /** * 获取某天的开始时间 * * @param date 日期 * @return {@link DateTime} */ public static DateTime beginOfDay(Date date) { return new DateTime(beginOfDay(calendar(date))); } /** * 获取某天的结束时间 * * @param date 日期 * @return {@link DateTime} */ public static DateTime endOfDay(Date date) { return new DateTime(endOfDay(calendar(date))); } /** * 获取某天的开始时间 * * @param calendar 日期 {@link Calendar} * @return {@link Calendar} */ public static Calendar beginOfDay(Calendar calendar) { calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar; } /** * 获取某天的结束时间 * * @param calendar 日期 {@link Calendar} * @return {@link Calendar} */ public static Calendar endOfDay(Calendar calendar) { calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 999); return calendar; } /** * 获取某周的开始时间 * * @param date 日期 * @return {@link DateTime} */ public static DateTime beginOfWeek(Date date) { return new DateTime(beginOfWeek(calendar(date))); } /** * 获取某周的结束时间 * * @param date 日期 * @return {@link DateTime} */ public static DateTime endOfWeek(Date date) { return new DateTime(endOfWeek(calendar(date))); } /** * 获取某周的开始时间 * * @param calendar 日期 {@link Calendar} * @return {@link Calendar} */ public static Calendar beginOfWeek(Calendar calendar) { return beginOfWeek(calendar, true); } /** * 获取某周的开始时间,周一定为一周的开始时间 * * @param calendar 日期 {@link Calendar} * @param isMondayAsFirstDay 是否周一做为一周的第一天(false表示周日做为第一天) * @return {@link Calendar} * @since 3.1.2 */ public static Calendar beginOfWeek(Calendar calendar, boolean isMondayAsFirstDay) { if (isMondayAsFirstDay) { // 设置周一为一周开始 calendar.setFirstDayOfWeek(Week.MONDAY.getValue()); calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); } else { calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); } return beginOfDay(calendar); } /** * 获取某周的结束时间,周日定为一周的结束 * * @param calendar 日期 {@link Calendar} * @return {@link Calendar} */ public static Calendar endOfWeek(Calendar calendar) { return endOfWeek(calendar, true); } /** * 获取某周的结束时间 * * @param calendar 日期 {@link Calendar} * @param isSundayAsLastDay 是否周日做为一周的最后一天(false表示周六做为最后一天) * @return {@link Calendar} * @since 3.1.2 */ public static Calendar endOfWeek(Calendar calendar, boolean isSundayAsLastDay) { if (isSundayAsLastDay) { // 设置周一为一周开始 calendar.setFirstDayOfWeek(Week.MONDAY.getValue()); calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); } else { calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); } return endOfDay(calendar); } /** * 获取某月的开始时间 * * @param date 日期 * @return {@link DateTime} */ public static DateTime beginOfMonth(Date date) { return new DateTime(beginOfMonth(calendar(date))); } /** * 获取某月的结束时间 * * @param date 日期 * @return {@link DateTime} */ public static DateTime endOfMonth(Date date) { return new DateTime(endOfMonth(calendar(date))); } /** * 获取某月的开始时间 * * @param calendar 日期 {@link Calendar} * @return {@link Calendar} */ public static Calendar beginOfMonth(Calendar calendar) { calendar.set(Calendar.DAY_OF_MONTH, 1); return beginOfDay(calendar); } /** * 获取某月的结束时间 * * @param calendar 日期 {@link Calendar} * @return {@link Calendar} */ public static Calendar endOfMonth(Calendar calendar) { calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return endOfDay(calendar); } /** * 获取某季度的开始时间 * * @param date 日期 * @return {@link DateTime} */ public static DateTime beginOfQuarter(Date date) { return new DateTime(beginOfQuarter(calendar(date))); } /** * 获取某季度的结束时间 * * @param date 日期 * @return {@link DateTime} */ public static DateTime endOfQuarter(Date date) { return new DateTime(endOfQuarter(calendar(date))); } /** * 获取某季度的开始时间 * * @param calendar 日期 {@link Calendar} * @return {@link Calendar} * @since 4.1.0 */ public static Calendar beginOfQuarter(Calendar calendar) { calendar.set(Calendar.MONTH, calendar.get(DateField.MONTH.getValue()) / 3 * 3); calendar.set(Calendar.DAY_OF_MONTH, 1); return beginOfDay(calendar); } /** * 获取某季度的结束时间 * * @param calendar 日期 {@link Calendar} * @return {@link Calendar} * @since 4.1.0 */ public static Calendar endOfQuarter(Calendar calendar) { calendar.set(Calendar.MONTH, calendar.get(DateField.MONTH.getValue()) / 3 * 3 + 2); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return endOfDay(calendar); } /** * 获取某年的开始时间 * * @param date 日期 * @return {@link DateTime} */ public static


评论


亲,登录后才可以留言!