愉快且方便的处理时间-- LocalDate

java中做时间处理时一般会采用java.util.Date,但是相比于Date来说,还有更好的选择 --java.time.LocalDate。

这是jdk8中新增的日期处理类,同时新增的还有java.time.LocalTime、java.time.LocalDateTime等。大多吐槽Date的是其对于月份的处理是从0开始的,取得正确月份还得往后偏移一位。Date内容很丰富,不但包含年月日,还包含时间。

相比Date来说,LoalDate更安全、更精确也更明确。LocalDate不包含时间,只是单纯的年月日,要精确到时分秒甚至毫秒的就需要用java.time.LocalDateTime了。

1、【LocalDate】
一般用法如下:

// 取当前日期:

LocalDate today = LocalDate.now(); // -> 2014-12-24

// 根据年月日取日期:

LocalDate crischristmas = LocalDate.of(2014, 12, 25); // -> 2014-12-25

// 根据字符串取:

LocalDate endOfFeb = LocalDate.parse("2014-02-28"); // 严格按照ISO yyyy-MM-dd验证,02写成2都不行,当然也有一个重载方法允许自己定义格式

LocalDate.parse("2014-02-29"); // 无效日期无法通过:DateTimeParseException: Invalid date

一般日期转换:


// 取本月第1天:

LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 2017-03-01

// 取本月第2天:

LocalDate secondDayOfThisMonth = today.withDayOfMonth(2); // 2017-03-02

// 取本月最后一天,再也不用计算是28,29,30还是31:

LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth()); // 2017-12-31

// 取下一天:

LocalDate firstDayOf2015 = lastDayOfThisMonth.plusDays(1); // 变成了2018-01-01

// 取2017年1月第一个周一,用Calendar要死掉很多脑细胞:

LocalDate firstMondayOf2015 = LocalDate.parse("2017-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2017-01-02

2、【LocalTime】
LocalTime只包含时间,获得当前时间:


LocalTimenow =LocalTime.now();// 23:11:08.006

构造时间:


LocalTime zero =LocalTime.of(0, 0, 0);// 00:00:00
LocalTimemid =LocalTime.parse("12:00:00");// 12:00:00

3、JDBC
最新JDBC映射将把数据库的日期类型和Java 8的新类型关联起来:


SQL -> Java--------------------------date -> LocalDate

time -> LocalTime

timestamp -> LocalDateTime

4、Date和LocalDateTime互相转换

// 01. java.util.Date --> java.time.LocalDateTime
public void UDateToLocalDateTime() {
    java.util.Date date = new java.util.Date();
    Instant instant = date.toInstant();
    ZoneId zone = ZoneId.systemDefault();
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
}

// 02. java.util.Date --> java.time.LocalDate
public void UDateToLocalDate() {
    java.util.Date date = new java.util.Date();
    Instant instant = date.toInstant();
    ZoneId zone = ZoneId.systemDefault();
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
    LocalDate localDate = localDateTime.toLocalDate();
}

// 03. java.util.Date --> java.time.LocalTime
public void UDateToLocalTime() {
    java.util.Date date = new java.util.Date();
    Instant instant = date.toInstant();
    ZoneId zone = ZoneId.systemDefault();
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
    LocalTime localTime = localDateTime.toLocalTime();
}


// 04. java.time.LocalDateTime --> java.util.Date
public void LocalDateTimeToUdate() {
    LocalDateTime localDateTime = LocalDateTime.now();
    ZoneId zone = ZoneId.systemDefault();
    Instant instant = localDateTime.atZone(zone).toInstant();
    java.util.Date date = Date.from(instant);
}


// 05. java.time.LocalDate --> java.util.Date
public void LocalDateToUdate() {
    LocalDate localDate = LocalDate.now();
    ZoneId zone = ZoneId.systemDefault();
    Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
    java.util.Date date = Date.from(instant);
}

// 06. java.time.LocalTime --> java.util.Date
public void LocalTimeToUdate() {
    LocalTime localTime = LocalTime.now();
    LocalDate localDate = LocalDate.now();
    LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
    ZoneId zone = ZoneId.systemDefault();
    Instant instant = localDateTime.atZone(zone).toInstant();
    java.util.Date date = Date.from(instant);
}

来源:客行者

你可能感兴趣的:(愉快且方便的处理时间-- LocalDate)