DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter tf = DateTimeFormatter.ofPattern("HH:mm:ss");
1.获取当月第一天和次月第一天时间
//————————————分割线(方法一)————————————————
//获得当前月第一天0时0分0秒
Date sdate = Date.from(localDate.with(TemporalAdjusters.firstDayOfMonth()).atStartOfDay(ZoneId.systemDefault()).toInstant());
//获得当次月第一天0时0分0秒
Date edate = Date.from(localDate.with(TemporalAdjusters.firstDayOfNextMonth()).atStartOfDay(ZoneId.systemDefault()).toInstant());
//————————————分割线(方法二)————————————————
//获得当前月第一天0时0分0秒
LocalDate firstDay= localDate.with(TemporalAdjusters.firstDayOfMonth());
LocalDateTime firstDaySencond = LocalDateTime.of(firstDay.getYear(),firstDay.getMonth(),firstDay.getDayOfMonth(),0,0,0);
//获得当前月最后天23时59分59秒
LocalDate lastDay= localDate.with(TemporalAdjusters.lastDayOfMonth());
LocalDateTime lastDaySencond = LocalDateTime.of(lastDay.getYear(),lastDay.getMonth(),lastDay.getDayOfMonth(),23,59,59);
//输出:
dtf.format(firstDaySencond);
2. 日期API
2.1 LocalDate
public static void testDate() {
// 1. 获取当前日期(年月日) -----打印输出-----2018-01-29
LocalDate localDate = LocalDate.now();
System.out.println(localDate.toString());
// 2. 根据年月日构建Date ----打印输出-----2018-01-30
LocalDate localDate1 = LocalDate.of(2018, 01, 30);
// 3. 字符串转换日期,默认按照yyyy-MM-dd格式,也可以自定义格式 -----打印输出-----2018-01-30
LocalDate localDate2 = LocalDate.parse("2018-01-30");
// 4. 获取本月第一天 -----打印输出-----2018-01-01
LocalDate firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
// 5. 获取本月第二天 -----打印输出-----2018-01-02
LocalDate secondDayOfMonth = localDate.withDayOfMonth(2);
// 6. 获取本月最后一天 -----打印输出-----2018-01-31
LocalDate lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
// 7. 明天 -----打印输出----- 2018-01-30
LocalDate tomorrowDay = localDate.plusDays(1L);
// 8. 昨天 -----打印输出----- 2018-01-28
LocalDate yesterday = localDate.minusDays(1L);
// 9. 获取本年第12天 -----打印输出----- 2018-04-30
LocalDate day = localDate.withDayOfYear(120);
// 10. 计算两个日期间的天数
long days = localDate.until(localDate1, ChronoUnit.DAYS);
System.out.println(days);
// 11. 计算两个日期间的周数
long weeks = localDate.until(localDate1, ChronoUnit.WEEKS);
System.out.println(weeks);
}
getYear() int 获取当前日期的年份
getMonth() Month 获取当前日期的月份对象
getMonthValue() int 获取当前日期是第几月
getDayOfWeek() DayOfWeek 表示该对象表示的日期是星期几
getDayOfMonth() int 表示该对象表示的日期是这个月第几天
getDayOfYear() int 表示该对象表示的日期是今年第几天
withYear(int year) LocalDate 修改当前对象的年份
withMonth(int month) LocalDate 修改当前对象的月份
withDayOfMonth(int dayOfMonth) LocalDate 修改当前对象在当月的日期
isLeapYear() boolean 是否是闰年
lengthOfMonth() int 这个月有多少天
lengthOfYear() int 该对象表示的年份有多少天(365或者366)
plusYears(long yearsToAdd) LocalDate 当前对象增加指定的年份数
plusMonths(long monthsToAdd) LocalDate 当前对象增加指定的月份数
plusWeeks(long weeksToAdd) LocalDate 当前对象增加指定的周数
plusDays(long daysToAdd) LocalDate 当前对象增加指定的天数
minusYears(long yearsToSubtract) LocalDate 当前对象减去指定的年数
minusMonths(long monthsToSubtract) LocalDate 当前对象减去注定的月数
minusWeeks(long weeksToSubtract) LocalDate 当前对象减去指定的周数
minusDays(long daysToSubtract) LocalDate 当前对象减去指定的天数
compareTo(ChronoLocalDate other) int 比较当前对象和other对象在时间上的大小,返回值如果为正,则当前对象时间较晚,
isBefore(ChronoLocalDate other) boolean 比较当前对象日期是否在other对象日期之前
isAfter(ChronoLocalDate other) boolean 比较当前对象日期是否在other对象日期之后
isEqual(ChronoLocalDate other) boolean 比较两个日期对象是否相等
2.2 LocalTime
同样,和LocalDate相对应的另一个类就是LocalTime,这个类恰好和LocalDate相反,它表示的全是时间,不包含日期。例子如下:
public static void testTime() {
// 1. 获取当前时间,包含毫秒数 -----打印输出----- 21:03:26.315
LocalTime localTime = LocalTime.now();
// 2. 构建时间 -----打印输出----- 12:15:30
LocalTime localTime1 = LocalTime.of(12, 15, 30);
// 3. 获取当前时间,不包含毫秒数 -----打印输出----- 21:01:56
LocalTime localTime2 = localTime.withNano(0);
// 4. 字符串转为时间,还可以有其他格式,比如12:15, 12:15:23.233
// -----打印输出----- 12:15:30
LocalTime localTime3 = LocalTime.parse("12:15:30");
}
2.3 LocalDateTime
LocalDateTime就和原先的java.util.Date很像了,既包含日期,又包含时间,它经常和DateTimeFormatter一起使用。
public static void testDateTime() {
// 1. 获取当前年月日 时分秒 -----打印输出----- 2018-01-29T21:23:26.774
LocalDateTime localDateTime = LocalDateTime.now();
// 2. 通过LocalDate和LocalTime构建 ----- 打印输出----- 2018-01-29T21:24:41.738
LocalDateTime localDateTime1 = LocalDateTime.of(LocalDate.now(), LocalTime.now());
// 3. 构建年月日 时分秒 -----打印输出----- 2018-01-29T19:23:13
LocalDateTime localDateTime2 = LocalDateTime.of(2018, 01, 29, 19, 23, 13);
// 4. 格式化当前时间 ----打印输出----- 2018/01/29
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
System.out.println(formatter.format(localDateTime2));
}
2.4 TemporalAdjusters
// 1. 本月第一天
LocalDate firstDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
// 2. 本月最后一天
LocalDate lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
// 3. 本年第一天
LocalDate firstDayOfYear = localDate.with(TemporalAdjusters.firstDayOfYear());
// 4. 下个月第一天
LocalDate firstDayOfNextMonth = localDate.with(TemporalAdjusters.firstDayOfNextMonth());
// 5. 本年度最后一天
LocalDate lastDayOfYear = localDate.with(TemporalAdjusters.lastDayOfYear());
3. 转换
3.1 java.util.Date与LocalDate,LocalTime,LocalDateTime替换
将Date转换为LocalDate,LocalTime,LocalDateTime可以借助于ZonedDateTime和Instant,实现如下:
Date date = new Date();
System.out.println("current date: " + date);
// Date -> LocalDateTime
LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println("localDateTime by Instant: " + localDateTime);
// Date -> LocalDate
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println("localDate by Instant: " + localDate);
// Date -> LocalTime
LocalTime localTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalTime();
System.out.println("localTime by Instant: " + localTime);
//2. Date -> LocalDateTime
localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
System.out.println("localDateTime by ofInstant: " + localDateTime);
由于JDK8实现了向下兼容,所以Date里在JDK8版本引入了2个方法,from
和toInstant
,所以我们可以借助这两个方法来实现LocalDateTime到Date的转换。将LocalDateTime转为Date如下:
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("localDateTime: " + localDateTime);
// LocalDateTime -> Date
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
System.out.println("LocalDateTime -> current date: " + date);
// LocalDate -> Date,时间默认都是00
LocalDate localDate = LocalDate.now();
date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
System.out.println("LocalDate -> current date: " + date);
3.2 日期与字符串的转换
日期与字符串的转换比较简单。先说转换成日期格式,通过LocalDate,LocalTime,LocalDateTime的parse方法和DateTimeFormatter来实现
LocalDate localDate = LocalDate.parse("2018-09-09", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDateTime localDateTime = LocalDateTime.parse("2018-09-10 12:12:12", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:ss:mm"));
而将日期转为字符串,可以通过format方法和DateTimeFormatter来实现:
String localDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String localDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:ss:mm"));
作者:骑着乌龟去看海
链接:https://www.jianshu.com/p/f4abe1e38e09
來源:简书