基于java 8 的时间工具类封装


import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
import java.util.Objects;

/**
 * 基于java 8 的时间工具类
 * 
 * @author it
 * @date 2019年5月6日
 */
public class LocalDateTimeUtil {

	private static final ZoneId defaultZoneId = ZoneId.systemDefault();

	// 获取到日期时间
	public static LocalDateTime systemLocalDateTime() {
		return LocalDateTime.now();
	}

	public static LocalDateTime toLocalDateTime(Date date) {
		Objects.requireNonNull(date, "date");
		ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(date.toInstant(), defaultZoneId);
		return zonedDateTime.toLocalDateTime();
	}

	public static Date systemDate() {
		LocalDateTime localDateTime = systemLocalDateTime();
		ZonedDateTime zone = localDateTime.atZone(defaultZoneId);
		return Date.from(zone.toInstant());
	}

	public static Date toDate(LocalDateTime localDateTime) {
		Objects.requireNonNull(localDateTime, "localDateTime");
		ZonedDateTime zone = localDateTime.atZone(defaultZoneId);
		return Date.from(zone.toInstant());
	}

	public static LocalDate toLocalDate(LocalDateTime localDateTime) {
		return localDateTime.toLocalDate();
	}

	public static LocalTime toLocalTime(LocalDateTime localDateTime) {
		return localDateTime.toLocalTime();
	}

	// 格式转换统一方法
	public static String format(LocalDateTime localDateTime, String formatStyle) {
		Objects.requireNonNull(localDateTime, "localDateTime");
		Objects.requireNonNull(formatStyle, "formatStyle");
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatStyle);
		return localDateTime.format(formatter);
	}

	public static LocalDateTime parse(String text, String formatStyle) {
		Objects.requireNonNull(text, "text");
		Objects.requireNonNull(formatStyle, "formatStyle");
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatStyle);
		return LocalDateTime.parse(text, formatter);
	}

	/**
	 * @Description: 基于格式转换统一方法精简封装
	 * @use:
	 * 
	 *       <pre>
	 *       LocalDateTime localDateTime = LocalDateTimeUtil.Format.FORMAT_NOLINE_YYYYMMDD24HHMMSS.parse(text);
	 *       </pre>
	 * 
	 * @author it
	 * @date 2019年5月6日
	 *
	 */
	public enum Format {
		FORMAT_YYMMDD {
			public String format(LocalDateTime localDateTime) {
				return LocalDateTimeUtil.format(localDateTime, FormatStyle.FORMAT_YYMMDD);
			}

			public LocalDateTime parse(String text) {
				return LocalDateTimeUtil.parse(text, FormatStyle.FORMAT_YYMMDD);
			}
		},
		FORMAT_YYYYMMDD24HHMMSS {
			public String format(LocalDateTime localDateTime) {
				return LocalDateTimeUtil.format(localDateTime, FormatStyle.FORMAT_YYYYMMDD24HHMMSS);
			}

			public LocalDateTime parse(String text) {
				return LocalDateTimeUtil.parse(text, FormatStyle.FORMAT_YYYYMMDD24HHMMSS);
			}
		},
		FORMAT_YYYYMMDD24HHMMSSSSS {
			public String format(LocalDateTime localDateTime) {
				return LocalDateTimeUtil.format(localDateTime, FormatStyle.FORMAT_YYYYMMDD24HHMMSSSSS);
			}

			public LocalDateTime parse(String text) {
				return LocalDateTimeUtil.parse(text, FormatStyle.FORMAT_YYYYMMDD24HHMMSSSSS);
			}
		},
		FORMAT_NOLINE_YYMMDD {
			public String format(LocalDateTime localDateTime) {
				return LocalDateTimeUtil.format(localDateTime, FormatStyle.FORMAT_NOLINE_YYMMDD);
			}

			public LocalDateTime parse(String text) {
				return LocalDateTimeUtil.parse(text, FormatStyle.FORMAT_NOLINE_YYMMDD);
			}
		},
		FORMAT_NOLINE_YYYYMMDD24HHMMSS {
			public String format(LocalDateTime localDateTime) {
				return LocalDateTimeUtil.format(localDateTime, FormatStyle.FORMAT_NOLINE_YYYYMMDD24HHMMSS);
			}

			public LocalDateTime parse(String text) {
				return LocalDateTimeUtil.parse(text, FormatStyle.FORMAT_NOLINE_YYYYMMDD24HHMMSS);
			}
		},
		FORMAT_NOLINE_YYYYMMDDHHMMSS {
			public String format(LocalDateTime localDateTime) {
				return LocalDateTimeUtil.format(localDateTime, FormatStyle.FORMAT_NOLINE_YYYYMMDDHHMMSS);
			}

			public LocalDateTime parse(String text) {
				return LocalDateTimeUtil.parse(text, FormatStyle.FORMAT_NOLINE_YYYYMMDDHHMMSS);
			}
		},
		FORMAT_NOLINE_YYYYMMDD24HHMMSSSSS {
			public String format(LocalDateTime localDateTime) {
				return LocalDateTimeUtil.format(localDateTime, FormatStyle.FORMAT_NOLINE_YYYYMMDD24HHMMSSSSS);
			}

			public LocalDateTime parse(String text) {
				return LocalDateTimeUtil.parse(text, FormatStyle.FORMAT_NOLINE_YYYYMMDD24HHMMSSSSS);
			}
		},
		FORMAT_NOLINE_YYYYMMDD24HHMM {
			public String format(LocalDateTime localDateTime) {
				return LocalDateTimeUtil.format(localDateTime, FormatStyle.FORMAT_NOLINE_YYYYMMDD24HHMM);
			}

			public LocalDateTime parse(String text) {
				return LocalDateTimeUtil.parse(text, FormatStyle.FORMAT_NOLINE_YYYYMMDD24HHMM);
			}
		},
		FORMAT_24HHMMSS {
			public String format(LocalDateTime localDateTime) {
				return LocalDateTimeUtil.format(localDateTime, FormatStyle.FORMAT_24HHMMSS);
			}

			public LocalDateTime parse(String text) {
				return LocalDateTimeUtil.parse(text, FormatStyle.FORMAT_24HHMMSS);
			}
		},
		FORMAT_YYYYMM {
			public String format(LocalDateTime localDateTime) {
				return LocalDateTimeUtil.format(localDateTime, FormatStyle.FORMAT_YYYYMM);
			}

			public LocalDateTime parse(String text) {
				return LocalDateTimeUtil.parse(text, FormatStyle.FORMAT_YYYYMM);
			}
		};

		public String format(LocalDateTime localDateTime) {
			throw new AbstractMethodError();
		}

		public LocalDateTime parse(String text) {
			throw new AbstractMethodError();
		}
	}

	/**
	 * @Description: 格式设置,自定义格式满足yyyy(年) MM(月) dd(日) HH(时) mm(分) ss(秒) SSS(毫秒)
	 * @author it
	 * @date 2019年5月6日
	 */
	public interface FormatStyle {
		String FORMAT_YYMMDD = "yyyy-MM-dd";
		String FORMAT_YYYYMMDD24HHMMSS = "yyyy-MM-dd HH:mm:ss";
		String FORMAT_YYYYMMDD24HHMMSSSSS = "yyyy-MM-dd HH:mm:ss.SSS";
		String FORMAT_NOLINE_YYMMDD = "yyyyMMdd";
		String FORMAT_NOLINE_YYYYMMDD24HHMMSS = "yyyyMMddHHmmss";
		String FORMAT_NOLINE_YYYYMMDDHHMMSS = "yyyymmddhhmmss";
		String FORMAT_NOLINE_YYYYMMDD24HHMMSSSSS = "yyyyMMddHHmmssSSS";
		String FORMAT_NOLINE_YYYYMMDD24HHMM = "yyyyMMddHHmm";
		String FORMAT_24HHMMSS = "HH:mm:ss";
		String FORMAT_YYMM = "yyMM";
		String FORMAT_YYYYMM = "yyyyMM";
		String FORMAT_YYYY = "yyyy";
		String FORMAT_MM = "MM";
		String FORMAT_DD = "dd";
		String FORMAT_HH = "HH";
		String FORMAT_mm = "mm";
	}

	// 请不要直接在LocalDateTimeUtils类中添加无用的方法,请添加在这里
	public static class Extend {

	}

	// 这里演示一下认为是工具类,但是java8已经提供了的方法,出现在这里的都【不用封装为工具类】
	public static class NonExtend {

		// LocalDateTime: 日期的加减,设置日期
		public void operate() {
			LocalDateTime localDateTime = systemLocalDateTime();
			// 加3天
			LocalDateTime plusDays = localDateTime.plusDays(3);
			// 减4小时
			LocalDateTime minusHours = localDateTime.minusHours(4);
			// 设置为3小时
			localDateTime.withHour(3);

			// 通过TemporalAdjuster对象可以设置
			// localDateTime.with(TemporalAdjuster);
		}

		// TemporalAdjusters: 任意时间设置,其中TemporalAdjuster是可以扩展的,可扩展属于专用,也不用扩展
		public void operate2() {
			LocalDate date = LocalDate.parse("2017-08-15");
			// 获取这个月的第一个周末的时间
			System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(1, DayOfWeek.SUNDAY)));// 2017-08-06
			// 获取上个月的最后一周
			System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(0, DayOfWeek.SUNDAY)));// 2017-07-30
			// 获取这个月的倒数第一个周末的时间
			System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(-1, DayOfWeek.SUNDAY)));// 2017-08-27

			// 获取这个月的第一个周末的时间,上面的dayOfWeekInMonth更灵活,可以定义第几周
			System.out.println(date.with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY)));// 2017-08-06

			// 其底层调用的是
			// return TemporalAdjusters.dayOfWeekInMonth(1, dayOfWeek);

			// 明年的第一天
			System.out.println(date.with(TemporalAdjusters.firstDayOfNextYear()));// 2018-01-01
			// 获取下周5的时间
			System.out.println(date.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)));// 2017-08-18
			System.out.println(date.with(TemporalAdjusters.next(DayOfWeek.TUESDAY)));// 2017-08-22,始终返回下周的某个时间
			// 获取周2时间
			System.out.println(date.with(TemporalAdjusters.nextOrSame(DayOfWeek.TUESDAY)));// 2017-08-15,如果当前时间刚好是星期三,那么就返回当前时间

			// 获取本月最后一天
			System.out.println(date.with(TemporalAdjusters.lastDayOfMonth()));// 2017-08-31

		}

		// LocalDateTime:解析具体的某一天等
		public void get() {
			LocalDateTime localDateTime = systemLocalDateTime();
			int year = localDateTime.getYear();
			int month = localDateTime.getMonthValue();
			int day = localDateTime.getDayOfMonth();
			int minute = localDateTime.getMinute();

			int second = localDateTime.get(ChronoField.SECOND_OF_MINUTE);
		}

		// LocalDate: 一个月天数,是否是瑞年
		public void judge() {
			LocalDateTime localDateTime = systemLocalDateTime();
			LocalDate localDate = toLocalDate(localDateTime);
			int lengthOfMonth = localDate.lengthOfMonth();
			int lengthOfYear = localDate.lengthOfYear();
			boolean leapYear = localDate.isLeapYear();
		}
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值