基于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:
	 * 
	 *       
	 *       LocalDateTime localDateTime = LocalDateTimeUtil.Format.FORMAT_NOLINE_YYYYMMDD24HHMMSS.parse(text);
	 *       
* * @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(); } } }

你可能感兴趣的:(编程)