0.前言
- Java 8 新增加了一些有关时间的API。如LocalDate和LocalTime。位于java.time下
- Date和Calendar对象都建议不使用了。
- 其中LocalDate仅仅包含日期,LocalTime仅仅保护时间。包含日期和时间的是LocalDateTime。
1. Java8引入的有关时间的api
- Clock ——时钟类可以指定一个时区,它可以获得当前的时刻、日期和时间
- Duration ——表示一段时间
- Instant ——表示在时间轴上的一个瞬间
- LocalDate——在ISO-8601日历系统中的一个不带时区的日期
- LocalDateTime ——在ISO-8601日历系统中的一个不带时区的日期和时间
- LocalTime ——在ISO-8601日历系统中的一个不带时区的时间
- MonthDay ——在ISO-8601日历系统中的一个月份中的日期
- OffsetDateTime ——在ISO-8601日历系统中的一个日期和时间,它加入了格林威治/UTC 时间偏移量
- OffsetTime ——在ISO-8601日历系统中的一个时间,它加入了格林威治/UTC 时间偏移量
- Period – 以天为单位的一段时间
- Year ——在ISO-8601日历系统中的一年
- YearMonth ——在ISO-8601日历系统中的一年中的月份
- ZonedDateTime ——在ISO-8601日历系统中的一个带有时区的日期和时间
- ZoneId ——表示一个时区ID
- ZoneOffset —— 表示与格林威治/UTC时间的时区偏移量
2.LocalDate的创建方法(LocalTime类似)
public static LocalDate now()//
public static LocalDate of(int year, Month month, int dayOfMonth)//通过指定的时间创建一个LocalDate对象
//throws DateTimeParseException if the text cannot be parsed。通过字符串解析来获得LocalDate,如果不能解析就抛出如下异常。
public static LocalDate parse(CharSequence text)
public static LocalDate parse(CharSequence text, DateTimeFormatter formatter)
3.LocalDate的常用方法
3.1生成LocalDateTime
public LocalDateTime atStartOfDay(); //返回当天的起始时间
public LocalDateTime dateTime = localDate.atTime(16,25,30);//设置当前日期的时间
3.2获取年,月,日等
public int getYear();
public int getMonthValue();
public int getDayOfMonth();
3.3修改年,月,日等
public LocalDate withDayOfMonth(int dayOfMonth);
public LocalDate withDayOfYear(int dayOfYear); Returns a copy of this LocalDate with the day-of-year altered
public LocalDate withMonth(int dayOfMonth)
public LocalDate withYear(int dayOfMonth)
3.4返回一些特殊的日期
public LocalDate with(TemporalAdjuster adjuster)
localDate.with(TemporalAdjusters.firstDayOfMonth) //本月第一天
- TemporalAdjusters.secondDayOfMonth 本月第二天
- TemporalAdjusters.lastDayOfMonth 本月最后一天
- 返回复杂的特殊日期.//2015年1月份第一个周一
LocalDate.parse("2015-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
3.5日期计算( 前几天,后几天,前几个月等)
public LocalDate plusDays(long daysToAdd)
public LocalDate plusMonths(long monthsToAdd)
public LocalDate plusYears(long yearsToAdd)
public LocalDate plus(long amountToAdd, TemporalUnit unit)
如 localDate.plus(8, ChronoUnit.HOURS)
//其中 TemporalUnit的取值如下:
ChronoUnit.DAYS
WEEKS
MONTHS
YEARS
DECADES
CENTURIES
MILLENNIA
ERAS
3.6 日期比较
- 注意,如果两个LocalDate的日期相等,返回的肯定是false。如果要包含相等日期,要如下操作(比较的日期+-1天即可):
public boolean isBefore(ChronoLocalDate other);
public boolean isAfter(ChronoLocalDate other);
missionDate.isAfter(afterDatePicker.getValue().plusDays(-1)) ;
missionDate.isBefore(beforeDatePicker.getValue().plusDays(1));
4.格式化输出字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM");
String formatDate = LocalDate.now().format(formatter);
5.long转换为LocDateTime
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(millis), ZoneId.systemDefault());
参考文章
- localDateTime、date、localDate、string、long之间的转换处理
网友评论