java8-dateandtime-api

回顧

Date 和 Calendar是能夠變化的類,非線程安全的java

第三方的時間庫 Joda-Timeexpress

 

IN java8

java.time LocalDate,LocalTime,LocalDateTime,Instant,Duration,Period安全

LocalDate,LocalTime,LocalDateTime

LocalDate是不可變的類,沒有具體一天的時間,不帶時區的信息ide

 

creating a LocalDate and reading its vaules,creating a LocalTime and reading its valuesspa

 

@Test.net

public void testLocalDate() {線程

LocalDate date = LocalDate.of(2014, 3, 18);three

int year = date.getYear();ip

Month month = date.getMonth();get

int day = -date.getDayOfMonth();

DayOfWeek dow = date.getDayOfWeek();

int len = date.lengthOfMonth();

boolean leap = date.isLeapYear();

Object[] params = {date, year, month, day, dow, len, leap};

System.out.println("is:" + JSONObject.toJSONString(params));

//the current date from the system clock

LocalDate today = LocalDate.now();

//get values using a TemporalField

int year1 = date.get(ChronoField.YEAR);

int month1 = date.get(ChronoField.MONTH_OF_YEAR);

int day1 = date.get(ChronoField.DAY_OF_MONTH);

}

 

@Test

public void testLocalTime() {

//13:45:20

LocalTime time = LocalTime.of(13, 45, 20);

int hour = time.getHour();

int minute = time.getMinute();

int second = time.getSecond();

}

 

@Test

public void testParseString() {

LocalDate date = LocalDate.parse("2014-03-18");

LocalTime time = LocalTime.parse("13:45:20");

}

 

creating a LocalDateTime directly or by combining a date and a time

 

@Test

public void testLocalDateTime() {

LocalDate date = LocalDate.parse("2014-03-18");

LocalTime time = LocalTime.parse("13:45:20");

LocalDateTime dt1 = LocalDateTime.of(2014, Month.MARCH, 18, 13, 45, 20);

LocalDateTime dt2 = LocalDateTime.of(date, time);

//combine date and time

LocalDateTime dt3 = date.atTime(13, 45, 20);

LocalDateTime dt4 = date.atTime(time);

LocalDateTime dt5 = time.atDate(date);

//from localdatetime to localdate or localtime

LocalDate date1 = dt1.toLocalDate();

LocalTime time1 = dt1.toLocalTime();

}

 

 

Duration ,Period

@Test

public void testDuration() {

//duration is used to represent an amount if time mesured in seconds and eventually nanoseconds

//cant pass a LocalDate to the between method.

 

LocalDateTime dateTime = LocalDateTime.now();

LocalDateTime dateTime1 = LocalDateTime.now();

LocalTime time1 = dateTime.toLocalTime();

LocalTime time2 = dateTime1.toLocalTime();

Duration duration = Duration.between(time1, time2);

Duration duration1 = Duration.between(dateTime, dateTime1);

}

 

@Test

public void testPeriod() {

//period

Period tenDays = Period.between(LocalDate.of(2014, 3, 8), LocalDate.of(2014, 3, 18));

}

@Test

public void testCreateFromFactory() {

//duration or period

Duration threeMinutes = Duration.ofMinutes(3);

Duration threeMinutes1 = Duration.of(3, ChronoUnit.MINUTES);

Period tenDays = Period.ofDays(10);

Period threeWeeks = Period.ofWeeks(3);

Period twoYearsSixMonthsOneDay = Period.of(2, 6, 1);

}

 

修改日期和時間

 

in a absolute way

@Test

public void testAttributesManipulating() {

LocalDate date1 = LocalDate.of(2014, 3, 18);

LocalDate date2 = date1.withYear(2011);// 2011-03-18

LocalDate date3 = date2.withDayOfMonth(25);//2011-03-25

LocalDate date4 = date3.with(ChronoField.MONTH_OF_YEAR, 9);//2011-09-25

}

 

 

in a relative way

@Test

public void testAttributesManipulating2(){

LocalDate date1=LocalDate.of(2014,3,18);//2014-03-18

LocalDate date2=date1.plusWeeks(1);

LocalDate date3=date2.minusYears(3);

LocalDate date4=date3.plus(6,ChronoUnit.MONTHS);

}

using the prediefined TemporalAdjusters

@Test

public void testUseTemporalAdjusters(){

LocalDate date1=LocalDate.of(2014,3,18);

LocalDate date2=date1.with(nextOrSame(DayOfWeek.SUNDAY));

//2014-03-31

LocalDate date3=date2.with(lastDayOfMonth());

}

建立本身的adjusters implements TemporlAdjuster

 

/**

*若是要一些特殊的日期計算能夠定義本身的計算方法類

* use TemporalAdjuster interface

*/

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;

}else if(dow==DayOfWeek.SATURDAY) {

dayToAdd=2;

}

return temporal.plus(dayToAdd, ChronoUnit.DAYS);

}

}

/**

*1 使用上面的類

*/

@Test

public void test() {

LocalDate date = LocalDate.now();

date.with(new NextWorkingDay());

}

 

/**

*2 using a lambda expression

*/

@Test

public void test1() {

LocalDate date = LocalDate.now();

date.with(temporal -> {

DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));

int dayToAdd = 1;

if (dow == DayOfWeek.FRIDAY) {

dayToAdd = 3;

} else if (dow == DayOfWeek.SATURDAY) {

dayToAdd = 2;

}

return temporal.plus(dayToAdd, ChronoUnit.DAYS);

});

}

 

 

/**

*3  using the TemporalAdjusters.ofdateAdjuster

*/

@Test

public void test2() {

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);

});

LocalDate date=LocalDate.now();

date=date.with(nextWorkingDay);

System.out.println("date:"+date.toString());

}

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息