java中做時(shí)間處理時(shí)一般會(huì)采用java.util.Date,但是相比于Date來(lái)說(shuō)嘱支,還有更好的選擇 --java.time.LocalDate贩汉。
這是jdk8中新增的日期處理類盖桥,同時(shí)新增的還有java.time.LocalTime、java.time.LocalDateTime等镊讼。大多吐槽Date的是其對(duì)于月份的處理是從0開(kāi)始的宽涌,取得正確月份還得往后偏移一位。Date內(nèi)容很豐富蝶棋,不但包含年月日卸亮,還包含時(shí)間。
相比Date來(lái)說(shuō)嚼松,LoalDate更安全嫡良、更精確也更明確。LocalDate不包含時(shí)間献酗,只是單純的年月日寝受,要精確到時(shí)分秒甚至毫秒的就需要用java.time.LocalDateTime了。
1罕偎、【LocalDate】
一般用法如下:
// 取當(dāng)前日期:
LocalDate today = LocalDate.now(); // -> 2014-12-24
// 根據(jù)年月日取日期:
LocalDate crischristmas = LocalDate.of(2014, 12, 25); // -> 2014-12-25
// 根據(jù)字符串群艹巍:
LocalDate endOfFeb = LocalDate.parse("2014-02-28"); // 嚴(yán)格按照ISO yyyy-MM-dd驗(yàn)證,02寫(xiě)成2都不行颜及,當(dāng)然也有一個(gè)重載方法允許自己定義格式
LocalDate.parse("2014-02-29"); // 無(wú)效日期無(wú)法通過(guò):DateTimeParseException: Invalid date
一般日期轉(zhuǎn)換:
// 取本月第1天:
LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 2017-03-01
// 取本月第2天:
LocalDate secondDayOfThisMonth = today.withDayOfMonth(2); // 2017-03-02
// 取本月最后一天甩苛,再也不用計(jì)算是28,29俏站,30還是31:
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth()); // 2017-12-31
// 取下一天:
LocalDate firstDayOf2015 = lastDayOfThisMonth.plusDays(1); // 變成了2018-01-01
// 取2017年1月第一個(gè)周一讯蒲,用Calendar要死掉很多腦細(xì)胞:
LocalDate firstMondayOf2015 = LocalDate.parse("2017-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2017-01-02
2、【LocalTime】
LocalTime只包含時(shí)間肄扎,獲得當(dāng)前時(shí)間:
LocalTimenow =LocalTime.now();// 23:11:08.006
構(gòu)造時(shí)間:
LocalTime zero =LocalTime.of(0, 0, 0);// 00:00:00
LocalTimemid =LocalTime.parse("12:00:00");// 12:00:00
3墨林、JDBC
最新JDBC映射將把數(shù)據(jù)庫(kù)的日期類型和Java 8的新類型關(guān)聯(lián)起來(lái):
SQL -> Java--------------------------date -> LocalDate
time -> LocalTime
timestamp -> LocalDateTime
4、Date和LocalDateTime互相轉(zhuǎn)換
// 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);
}
來(lái)源:客行者