JAVA8 新时间类的操作

package da.test3.java8;

import java.time.DayOfWeek;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.Period;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Set;

import org.junit.Test;

public class TestLocalDateTime {
	// 6.ZonedDate、ZonedTime、ZonedDateTime : 带时区的时间或日期
	@Test
	public void test8() {
		LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
		System.out.println(ldt);

		LocalDateTime ldt2 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
		ZonedDateTime zone = ldt2.atZone(ZoneId.of("Asia/Shanghai"));
		System.out.println(zone);
	}

	@Test
	public void test7() {
		Set<String> zoneIds = ZoneId.getAvailableZoneIds();
		zoneIds.forEach(System.out::println);
	}

	// 5. DateTimeFormatter : 解析和格式化日期或时间
	@Test
	public void test6() {
		DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
		LocalDateTime ldt = LocalDateTime.now();

		String str = ldt.format(dtf);
		System.out.println(str);

		System.out.println("-----------------------");

		DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
		String newDate = dtf2.format(ldt);
		System.out.println(newDate);

		LocalDateTime ldt2 = LocalDateTime.parse(newDate, dtf2);
		System.out.println(ldt2);
	}

	// 4. TemporalAdjuster : 时间校正器
	@Test
	public void test5() {
		LocalDateTime ldt = LocalDateTime.now();
		System.out.println(ldt);

		LocalDateTime ldt2 = ldt.withDayOfMonth(10);
		System.out.println(ldt2);

		LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
		System.out.println(ldt3);

		// 自定义:下一个工作日
		LocalDate ld = LocalDate.now().with((l) -> {
			LocalDate ld1 = (LocalDate) l;

			DayOfWeek dow = ld1.getDayOfWeek();

			if (dow.equals(DayOfWeek.FRIDAY)) {
				return ld1.plusDays(3);
			} else if (dow.equals(DayOfWeek.SATURDAY)) {
				return ld1.plusDays(2);
			} else {
				return ld1.plusDays(1);
			}
		});
		System.out.println("下一个工作日是:" + ld);
	}

	// 3.
	// Duration : 用于计算两个“时间”间隔
	// Period : 用于计算两个“日期”间隔
	@Test
	public void test4() {
		LocalDate ld1 = LocalDate.now();

		LocalDate ld2 = LocalDate.of(2014, 12, 21);

		Period period = Period.between(ld2, ld1);
		System.out.println(period);

		System.out.println(period.getYears() + "-" + period.getMonths() + "-" + period.getDays());
	}

	@Test
	public void test3() {
		Instant ins1 = Instant.now();

		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		Instant ins2 = Instant.now();

		Duration between = Duration.between(ins1, ins2);
		System.out.println(between.getSeconds());

		LocalTime lt1 = LocalTime.now();

		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		LocalTime lt2 = LocalTime.now();

		System.out.println(Duration.between(lt1, lt2).toMillis());
	}

	// 2. Instant : 时间戳。 (使用 Unix 元年 1970年1月1日 00:00:00 所经历的毫秒值)
	@Test
	public void test2() {
		Instant it = Instant.now();// 默认使用 UTC 时区
		System.out.println(it);

		OffsetDateTime odt = it.atOffset(ZoneOffset.ofHours(8));
		System.out.println(odt);

		System.out.println(it.toEpochMilli());

		Instant it2 = Instant.ofEpochSecond(1);
		System.out.println(it2);
	}

	// 1. LocalDate、LocalTime、LocalDateTime
	@Test
	public void test1() {
		LocalDateTime ldt = LocalDateTime.now();
		System.out.println(ldt);

		LocalDateTime ldt2 = LocalDateTime.of(2016, 11, 11, 13, 25, 14);
		System.out.println(ldt2);

		LocalDateTime ldt3 = ldt.plusYears(2);
		System.out.println(ldt3);

		LocalDateTime ldt4 = ldt.minusMonths(2);
		System.out.println(ldt4);

		System.out.println(ldt.getYear());
		System.out.println(ldt.getMonthValue());
		System.out.println(ldt.getDayOfMonth());
		System.out.println(ldt.getHour());
		System.out.println(ldt.getMinute());
		System.out.println(ldt.getSecond());
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值