Java8的日期新接口LocalDate

Java8里,把日期和时间类进行了优化:

LocalDate / LocalDateTime 的功能几乎是java.util.Date + java.sql.Date + java.util.Calendar + SimpleDateFormate之和:

这两个包在java.time下,所有的日期或时间都在这个包里搞定,是时候仍掉老一套日期了,原来每个项目都少不了DateUtil,也可以仍掉了。

不说了,直接贴代码。

不管是日期初始化、格式化、还是日期加减,都灰常简洁,

父亲节这样复杂的日期也一行代码搞定:

		LocalDate 当前日期 = LocalDate.now();
		LocalDate 分年月日分别指定日期 = LocalDate.of(2018, 07, 01);// 所见即所得,2018-07-01,可以与Calendar类对比
		Calendar cal = Calendar.getInstance();
		cal.set(2018, 07, 01); // 注意:通过Calendar创建的日期,月份是要从零开始的,因此这个是2018年8月1日,不是7月1日
		LocalDate 默认iso方式的日期 = LocalDate.parse("2018-07-01"); // 按照ISO 8601 yyyy-MM-dd格式验证,02不能写成2
		LocalDate 没有中划线的日期 = LocalDate.parse("20180701", DateTimeFormatter.BASIC_ISO_DATE);
		LocalDate 斜杠方式的日期 = LocalDate.parse("2018/07/03", DateTimeFormatter.ofPattern("yyyy/MM/dd")); // 自定义格式
		LocalDate 某年某月某日 = LocalDate.parse("2018年07月31日", DateTimeFormatter.ofPattern("yyyy年MM月dd日")); // 自定义格式
		LocalDate 获取20天之后的日期 = LocalDate.now().plusDays(20);
		LocalDate 获取1个月后的日期 = LocalDate.now().plusMonths(1);
		LocalDate 获取1周前的日期 = LocalDate.now().minusWeeks(1);
		LocalDate 获取2017年5月12日之后一年的日期 = LocalDate.parse("2017-05-12").plusYears(1);

		// 6月的第3个周日是父亲节,获取父亲节日期:先定位到今年的6月第1天,再把日期调整到第一个星期日,再加两周
		LocalDate 今年的父亲节日期 = LocalDate.of(LocalDate.now().getYear(), Month.JUNE, 1)
				.with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY)).plusWeeks(2);

		// 生日
		LocalDate date = LocalDate.of(1949, 10, 01);
		MonthDay 生日 = MonthDay.of(date.getMonth(), date.getDayOfMonth()); // MonthDay只存储了月日,天然适合节日、生日的判断
		MonthDay 当前月日 = MonthDay.from(LocalDate.now());
		if (当前月日.equals(生日)) {
			System.out.println("今天是你的生日啦");
		} else {
			System.out.println("今天不是你的生日");
		}


		LocalDate after30Days = LocalDate.now().plusDays(30); // 当前日期的30天之后,如当前时间:2018-07-17,则输出值为2018-08-16
		LocalDate afterOneMonth = LocalDate.now().plusMonths(1); // 当前日期的1个月后,如当前时间:2018-07-17,2018-08-17
		LocalDate afterOneMonth2 = LocalDate.of(2018, 01, 30).plusMonths(1); // 2018-01-29之后的30天
		LocalDate beforeOneWeek = LocalDate.now().plusWeeks(1); // 一个星期后
		LocalDate nextMontFirstDay = LocalDate.now().plusMonths(-1).withDayOfMonth(1); // 上个月的第一天 ,屯minusMonths(1)相同
		LocalDate 下个月的最后一天 = LocalDate.now().plusMonths(1).withDayOfMonth(Month.AUGUST.maxLength());

猜你喜欢

转载自blog.csdn.net/china_3/article/details/81203480
今日推荐