public static void main(String[] args) {
// 当前时间
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATETIME_PATTERN);
LocalDateTime now = LocalDateTime.now();
String format = now.format(dateTimeFormatter);
System.out.println("当前时间:" + format);
// 获取当前时间戳(秒、毫秒)
long toEpochMilli = Instant.now().toEpochMilli();
long epochSecond = Instant.now().getEpochSecond();
System.out.println("时间戳秒:" + epochSecond);
System.out.println("时间戳毫秒:" + toEpochMilli);
// 指定当前时间 21:00:00
LocalTime localTime = LocalTime.of(21, 0, 0);
LocalDateTime ofTime = LocalDateTime.of(LocalDate.now(), localTime);
System.out.println("指定当前时:" + dateTimeFormatter.format(ofTime));
// 获取月份 年份
int month = LocalDate.now().getMonthValue();
int year = LocalDate.now().getYear();
System.out.println("月份:" + month);
System.out.println("年份:" + year);
// 获取昨天日期
LocalDate localDate1 = LocalDate.now().minusDays(1);
System.out.println("昨天日期:" + localDate1);
// 获取明天日期
LocalDate localDate2 = LocalDate.now().plusDays(1);
System.out.println("明天日期:" + localDate2);
/**
* 本周第一天
*
* @param date 传入时间
* @return
*/
public static Date getStartDayOfWeek(TemporalAccessor date) {
TemporalField fieldIso = WeekFields.of(DayOfWeek.MONDAY, 1).dayOfWeek();
LocalDate localDate = LocalDate.from(date);
localDate = localDate.with(fieldIso, 1);
return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
/**
* 本周最后一天
*
* @param date 传入时间
*/
public static Date getEndDayOfWeek(TemporalAccessor date) {
TemporalField fieldIso = WeekFields.of(DayOfWeek.MONDAY, 1).dayOfWeek();
LocalDate localDate = LocalDate.from(date);
localDate = localDate.with(fieldIso, 7);
return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
// 本月第几天
int dayOfMonth = LocalDate.now().getDayOfMonth();
System.out.println("本月第几天:" + dayOfMonth);
// 今年第几天
int dayOfYear = LocalDate.now().getDayOfYear();
System.out.println("今年第几天:" + dayOfYear);
// 获取当前是今年多少周
int i = LocalDate.now().get(WeekFields.SUNDAY_START.weekOfYear());
System.out.println("当前第几周:" + i);
// 获取本月第一天
LocalDate firstOfMonth = LocalDate.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), 1);
System.out.println("本月第一天:" + firstOfMonth);
// 获取本月最后一天
LocalDate lastOfMonth = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
System.out.println("本月最后一天:" + lastOfMonth);
// 获取今年第一天
LocalDate firstDayOfYear = LocalDate.now().with(TemporalAdjusters.firstDayOfYear());
System.out.println("今年第一天:" + firstDayOfYear);
// 获取今年最后一天
LocalDate lastDayOfYear = LocalDate.now().with(TemporalAdjusters.lastDayOfYear());
System.out.println("今年最后一天:" + lastDayOfYear);
// 日期相等判断
System.out.println(firstDayOfYear.isEqual(lastDayOfYear));
// 获取今天是周几
DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
System.out.println("今天是周几呢:" + dayOfWeek);
// date 转 LocalDateTime 方式一
Date date = new Date();
Instant instant = date.toInstant();
LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println("date 转 LocalDateTime(1):"+ localDateTime);
// date 转 LocalDateTime 方式二
LocalDateTime time = instant.atOffset(ZoneOffset.ofHours(8)).toLocalDateTime();
System.out.println("date 转 LocalDateTime(2):"+ time);
// LocalDateTime 转 date
LocalDateTime dateTime = LocalDateTime.now();
ZonedDateTime zdt = dateTime.atZone(ZoneId.systemDefault());
Date tDate = Date.from(zdt.toInstant());
System.out.println("LocalDateTime 转 date" + tDate);
// 时间戳转 LocalDateTime
LocalDateTime toLocalDateTime = Instant.ofEpochMilli(System.currentTimeMillis()).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
System.out.println("时间戳(毫秒)转 LocalDateTime " + toLocalDateTime);
// 或者
LocalDateTime toLocalDateTime2 = LocalDateTime.ofEpochSecond(System.currentTimeMillis() / 1000, 0, ZoneOffset.ofHours(8));
System.out.println("时间戳(毫秒)转 LocalDateTime " + toLocalDateTime2);
// LocalDateTime转 时间戳(秒)
long toEpochSecond = LocalDateTime.now().toEpochSecond(ZoneOffset.ofHours(8));
System.out.println("LocalDateTime转 时间戳(秒)" + toEpochSecond);
// LocalDateTime转 时间戳(毫秒)
long epochMilli = LocalDateTime.now().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
System.out.println("LocalDateTime转 时间戳(毫秒)" + epochMilli);
/**
* 总结下
*
* ZoneId: 时区ID,用来确定Instant和LocalDateTime互相转换的规则
*
* Instant: 用来表示时间线上的一个点(瞬时)
*
* LocalDate: 表示没有时区的日期, LocalDate是不可变并且线程安全的
*
* LocalTime: 表示没有时区的时间, LocalTime是不可变并且线程安全的
*
* LocalDateTime: 表示没有时区的日期时间, LocalDateTime是不可变并且线程安全的
*
* Clock: 用于访问当前时刻、日期、时间,用到时区
*
* Duration: 用秒和纳秒表示时间的数量(长短),用于计算两个日期的“时间”间隔
*
* Period: 用于计算两个“日期”间隔
*/
// LocalDateTime 相当于 LocalDate 和 LocalTime 结合体
// 如果出于对日期的判断用 LocalDate,如果仅仅针对时间处理 可以用 LocalTime
// 当然LocalDateTime也同样适用
System.out.println(new Date());
}
网友评论