//2017-03-20 LocalDate date = LocalDate.of(2017, 3, 20); int year = date.getYear();//2017 返回年份 Month month = date.getMonth();//MARCH 返回月份 3月 int dayOfMonth = date.getDayOfMonth();//20 返回月中的第幾天 DayOfWeek dayOfWeek = date.getDayOfWeek();//MONDAY 返回星期幾 int len = date.lengthOfMonth();//31 返回這個月有多少天 boolean leapYear = date.isLeapYear(); //false 是不是閏年 //獲取系統時間 LocalDate now = LocalDate.now(); //至關於 new Date() //14:33:45 LocalTime time = LocalTime.of(14, 33, 45); int hour = time.getHour();//時 int minute = time.getMinute();//分 int second = time.getSecond();//秒 //還能夠經過解析表明他們的字符串建立. LocalDate date = LocalDate.parse("2017-03-20"); LocalDate dateTime = LocalDate.parse("14:33:20");
LocalDate date = LocalDate.of(2017, 3, 20); LocalTime time = LocalTime.of(14, 33, 45); LocalDateTime dateTime = LocalDateTime.of(2017, 3, 20, 14, 41, 40); LocalDateTime dateTime1 = LocalDateTime.of(date, time); LocalDateTime dateTime2 = date.atTime(14, 33, 45); LocalDateTime dateTime3 = date.atTime(time); LocalDateTime dateTime4 = time.atDate(date); //從LocalDateTime裝換爲LocalDate和LocalTime LocalDate localDate = dateTime.toLocalDate(); LocalTime localTime = dateTime.toLocalTime();
//以直觀的方式操做LocalDate屬性 LocalDate date = LocalDate.of(2017, 3, 20);//2017-3-20 LocalDate localDate = date.withYear(2011);//2011-3-20 LocalDate localDate1 = localDate.withDayOfMonth(25);//2011-3-25 LocalDate with = localDate1.with(ChronoField.MONTH_OF_YEAR, 9);//2011-9-25 //以相對的方式操做LocalDate屬性 LocalDate localDate2 = date.plusWeeks(1);//一週後 2017-03-27 LocalDate localDate3 = localDate2.minusYears(3);//3年前 2014-03-27 LocalDate plus = localDate3.plus(6, ChronoUnit.MONTHS);//6個月後 2014-09-27 下面介紹LocalDate LocalTime LocalDateTime Instant的通用方法: //Temporal是接口 全部的日期時間類 實現了該接口 //from 依據傳入的Temporal對象建立對象實例 //now 依據系統時鐘建立Temporal對象 //of 有Temporal對象的某個部分建立該對象的實例 //parse 由字符串建立Temporal對象的實例 //atOffset 將Temporal對象和某個時區偏移相結合 //atZone 將Temporal對象和某個時區相結合 //format 使用某個指定的格式器將Temporal對象轉換爲字符串(Instant類不提供該方法) //get 讀取Temporal對象的某一部分 //minus 建立Temporal對象的一個副本,經過將當前Temporal對象的值減去必定的時長建立該副本 //plus 建立Temporal對象的一個副本,經過將當前Temporal對象的值加上必定的時長建立該副本 //with 以該Temporal對象爲模板,對某些狀態進行修改建立該對象的副本
import java.time.LocalDate; import static java.time.temporal.TemporalAdjusters.*; /** * @author Darcy * Created by Administrator on 2017/3/20. */ public class TestTemporalAdjuster { public static void main(String[] args) { LocalDate date = LocalDate.of(2017, 3, 20); LocalDate date1 = date.with(nextOrSame(DayOfWeek.SUNDAY));//下一個週日 2017-03-26 LocalDate date3 = date1.with(lastDayOfMonth());//當月最後一天 2017-03-31 System.out.println(date3); } } 下面是工廠方法介紹: //dayOfWeekInMonth 建立一個新的日期,它的值爲同一個月中每一週的第幾天, //firstDayOfMonth 建立一個新的日期,它的值爲當月的第一天 //firstDayOfNextMonth 建立一個新的日期,它的值爲下個月的第一天 //firstDayOfNextYear 建立一個新的日期,它的值爲明年的第一天 //firstDayOfYear 建立一個新的日期,它的值爲當年的第一天 //firstInMonth 建立一個新的日期 它的值同一個月中,第一個符合星期幾要求的值 //lastDayOfMonth 建立一個新的日期,它的值爲當月的最後一天 //lastDayOfNextMonth 建立一個新的日期,它的值爲下個月的最後一天 //lastDayOfNextYear 建立一個新的日期,它的值爲明年的最後一天 //lastDayOfYear 建立一個新的日期,它的值爲當年的最後一天 //lastInMonth 建立一個新的日期 它的值同一個月中,最後一個符合星期幾要求的值 //next/previous 建立一個新的日期 並將其值設定爲日期調整後或者調整前,第一個符合指定星期幾要求的日期 //nextOrSame/previousOrSame 建立一個新的日期 並將其值設定爲日期調整後或者調整前,第一個符合指定星期幾要求的日期 若是該日期符合要求,直接返回改對象 定製TemporalAdjuster實現自定義的日期操做 /** * 定製TemporalAdjuster 能計算明天的日期,同時過濾掉週六和週日 * * @author Darcy * Created by Administrator on 2017/3/20. */ public class NextWorkingDay implements TemporalAdjuster { @Override public Temporal adjustInto(Temporal temporal) { //讀取當天日期 DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK)); int dayToAdd = 1;//正常狀況下增長一天 if (dow == DayOfWeek.FRIDAY) dayToAdd = 3; if (dow == DayOfWeek.SATURDAY) dayToAdd = 2; return temporal.plus(dayToAdd, ChronoUnit.DAYS); } } 使用方式: LocalDate date = LocalDate.of(2017, 3, 20); LocalDate with = date.with(new NextWorkingDay()); 還有2中實現方式: //或者用lambda表達式 可是這種不利於複用 LocalDate with1 = date.with(temporal -> { DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK)); int dayToAdd = 1;//正常狀況下增長一天 if (dow == DayOfWeek.FRIDAY) dayToAdd = 3; if (dow == DayOfWeek.SATURDAY) dayToAdd = 2; return temporal.plus(dayToAdd, ChronoUnit.DAYS); }); //便於複用 TemporalAdjuster nextWorkingDay = TemporalAdjusters.ofDateAdjuster(temporal -> { //讀取當天日期 DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK)); int dayToAdd = 1;//正常狀況下增長一天 if (dow == DayOfWeek.FRIDAY) dayToAdd = 3; if (dow == DayOfWeek.SATURDAY) dayToAdd = 2; return temporal.plus(dayToAdd, ChronoUnit.DAYS); }); date.with(nextWorkingDay);
LocalDate date = LocalDate.of(2017, 3, 20); String format = date.format(DateTimeFormatter.BASIC_ISO_DATE);//20170320 String format2 = date.format(DateTimeFormatter.ISO_LOCAL_DATE);//2017-03-20 LocalDate.parse("20170320", DateTimeFormatter.BASIC_ISO_DATE); LocalDate.parse("2017-03-20", DateTimeFormatter.ISO_LOCAL_DATE); //按照某種格式建立DateTimeFormatter DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); String format1 = date.format(dateTimeFormatter); LocalDate parse = LocalDate.parse(format1, dateTimeFormatter); //若是須要更加細粒度的控制,DateTimeFormatterBuilder類提供了更復雜的格式器,可使用 一步一步的構造本身的格式器 DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendText(ChronoField.DAY_OF_MONTH) .appendLiteral(". ") .appendText(ChronoField.MONTH_OF_YEAR) .appendLiteral(" ") .appendText(ChronoField.YEAR) .parseCaseInsensitive()//對大小寫不敏感 .toFormatter(Locale.CHINA); LocalDate date3 = LocalDate.of(2017, 3, 20); String format3 = date3.format(formatter); //20. 三月 2017
//地區ID都爲{區域}/{城市}的格式,這些地區集合的設定都由英特網編號分配機構(IANA)的市區數據庫提供 ZoneId romeZone = ZoneId.of("Europe/Rome"); //能夠經過Java8的新方法 將老的時區裝換爲ZoneId ZoneId zoneId = TimeZone.getDefault().toZoneId(); LocalDate date = LocalDate.of(2017, 3, 20); ZonedDateTime zonedDateTime = date.atStartOfDay(romeZone); LocalDateTime dateTime = LocalDateTime.of(2017, 3, 20, 14, 41, 40); ZonedDateTime zonedDateTime1 = dateTime.atZone(romeZone); Instant now = Instant.now(); ZonedDateTime zonedDateTime2 = now.atZone(romeZone); //使用別的日曆系統 //java8 另外提供了4中其餘的日曆系統 ThaiBuddhistDate MinguoDate JapaneseDate HijrahDate ThaiBuddhistDate now1 = ThaiBuddhistDate.now();//ThaiBuddhist BE 2560-03-20 MinguoDate now2 = MinguoDate.now();//Minguo ROC 106-03-20 JapaneseDate now3 = JapaneseDate.now();//Japanese Heisei 29-03-20 HijrahDate now4 = HijrahDate.now();//Hijrah-umalqura AH 1438-06-21 JapaneseDate from = JapaneseDate.from(date); //Japanese Heisei 29-03-20