java8-dateandtime-api

回顾

Date 和 Calendar是可以变化的类,非线程安全的

第三方的时间库 Joda-Time

 

IN java8

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

LocalDate,LocalTime,LocalDateTime

LocalDate是不可变的类,没有具体一天的时间,不带时区的信息

 

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

 

@Test

public void testLocalDate() {

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

int year = date.getYear();

Month month = date.getMonth();

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

}

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/iioschina/blog/1853350

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值