您的位置:首页 > 编程语言 > Java开发

java8 日期time测试用例以及结果分析

2016-12-10 16:58 316 查看
/*
* 版权信息:北京汉方三陆零科技有限公司</br>
* Copyright ?2014-2015. All rights reserved.  京ICP备15000045号
*/
package com.lin.fund;

import java.sql.Timestamp;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;
import java.time.MonthDay;
import java.time.Period;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
import java.util.Set;

import org.junit.Test;

/****************************************************************************
* com.lin.fund Java8TimeTest.java Created on 2015年12月18日
* @Author: linfenliang
* @Description:
* @Version: 1.0
***************************************************************************/
public class Java8TimeTest {
static void sleep(long milliseconds){
try {
Thread.sleep(milliseconds);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Test
public void InstantDurationTest() {
System.out.println("---------------InstantDurationTest-------------");
Instant start = Instant.now();
long t0 = start.getEpochSecond();
System.out.println("Instant getEpochSecond:"+t0);
int t1 = start.getNano();
System.out.println("Instant getNano:"+t1);
long t2 = System.currentTimeMillis();
System.out.println("System.currentTimeMillis():"+t2);
sleep(100);
Instant end = Instant.now();
Duration duration = Duration.between(start, end);

System.out.println("test function run in time(nano) :"+duration.getNano()+",millis:"+duration.toMillis());

Duration d1 = Duration.ofMillis(1000);
System.out.println("检查两个duration相减是否为负数:"+duration.minus(d1).isNegative());
Instant instant1 = Calendar.getInstance().toInstant();
System.out.println("from Calendar instant:"+instant1);
System.out.println("instant now :"+Instant.now());
/*      java.time 包结构

*/
}
@Test
public void LocalDateTemporalAdjustersTest(){
System.out.println("------------LocalDate、TemporalAdjusters Test-------------");
LocalDate today = LocalDate.now();
System.out.println("LocalDate today:"+today);
LocalDate myBirthday = LocalDate.of(1988, 1, 1);
System.out.println("LocalDate 1988-01-01:"+myBirthday);
myBirthday = LocalDate.of(1988, Month.JANUARY, 1);
System.out.println("LocalDate 1988-01-01:"+myBirthday);
LocalDate thatDate = myBirthday.plusDays(256);
System.out.println("当年程序员日:"+thatDate);
LocalDate nextMonthOfDay = LocalDate.of(2015, Month.JANUARY, 31).plusMonths(1);
System.out.println("2015年1月31日加上一个月后的日期:"+nextMonthOfDay);
System.out.println("今天周几:"+today.getDayOfWeek().getValue());
MonthDay md = MonthDay.now();
System.out.println("月-日:"+md.getMonthValue()+"-"+md.getDayOfMonth());

YearMonth ym = YearMonth.now();
System.out.println("年-月:"+ym.getYear()+"-"+ym.getMonthValue());

LocalDate firstSaturday = LocalDate.of(2016, Month.JANUARY, 1).with(TemporalAdjusters.nextOrSame(DayOfWeek.SATURDAY));
System.out.println("2016年的第一个周六:"+firstSaturday);
System.out.println("2016年的1月的最后一个周五:"+LocalDate.of(2016, Month.JANUARY, 1).with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY)));
System.out.println("2016年的1月的第二个周五:"+LocalDate.of(2016, Month.JANUARY, 1).with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.FRIDAY)));
//      TemporalAdjuster nextFair = f->{
//          LocalDate date = (LocalDate) f;
//          return date.plusDays(5 - date.getDayOfYear()%5);
//      };
TemporalAdjuster nextFair = TemporalAdjusters.ofDateAdjuster(f->f.plusDays(5 - f.getDayOfYear()%5));
LocalDate nextYearOfFirstFair = LocalDate.of(2015,Month.DECEMBER, 31).with(nextFair);

System.out.println("下一年的第一个集市:"+nextYearOfFirstFair);
}
@Test
public void LocalTimeTest(){
System.out.println("--------------LocalTime------------");
LocalTime rightNow = LocalTime.now();
LocalTime thisTime = LocalTime.of(11, 14);
System.out.println("rightNow time:"+rightNow);
System.out.println("this time:"+thisTime);
}
@Test
public void ZoneDateTimeTest(){
System.out.println("--------------ZoneDateTime--------------");
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
zoneIds.forEach(s->System.out.print(s+","));
System.out.println();
ZonedDateTime zdt = ZonedDateTime.of(LocalDate.now(), LocalTime.now(), ZoneId.of("Asia/Shanghai"));
//      zdt.toInstant();
System.out.println(zdt);
Instant now = Instant.now();
ZonedDateTime zonedNow = now.atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(zonedNow);
//由于中国不再使用夏令时,欧洲大部分地区采用夏令时,目前仅作简单逻辑判断
ZonedDateTime skipped = ZonedDateTime.of(LocalDate.of(2013, 3, 31), LocalTime.of(2, 30),ZoneId.of("Europe/Berlin"));
System.out.println("2013年的3月21日,2:30不存在:"+skipped);
//下周一早上9点在柏林开会
ZonedDateTime wrongMeeting = ZonedDateTime.of(LocalDate.of(2016, 3, 10), LocalTime.of(9, 0),ZoneId.of("Europe/Berlin")).plus(Duration.ofDays(20));
ZonedDateTime nextMeeting = ZonedDateTime.of(LocalDate.of(2016, 3, 10), LocalTime.of(9, 0),ZoneId.of("Europe/Berlin")).plus(Period.ofDays(20));
System.out.println("【错误】:2016年3月10日上午九点在柏林说:20天后这个点开会:"+wrongMeeting);
System.out.println("2016年3月10日上午九点在柏林说:20天后这个点开会:"+nextMeeting);

}
@Test
public void DateTimeFormatterTest(){
System.out.println("------------------DateTimeFormatter test------------------");
LocalDateTime now = LocalDateTime.now();
String formatted = DateTimeFormatter.ISO_DATE_TIME.format(now);
System.out.println("ISO_DATE_TIME:"+formatted);
System.out.println("BASIC_ISO_DATE:"+DateTimeFormatter.BASIC_ISO_DATE.format(now));
System.out.println("ISO_LOCAL_DATE_TIME:"+DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(now));
System.out.println("ISO_LOCAL_DATE:"+DateTimeFormatter.ISO_LOCAL_DATE.format(now));
System.out.println("ISO_ORDINAL_DATE:"+DateTimeFormatter.ISO_ORDINAL_DATE.format(now));
System.out.println("ISO_WEEK_DATE:"+DateTimeFormatter.ISO_WEEK_DATE.format(now));
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(formatter.format(now));
DateTimeFormatter f = DateTimeFormatter.ofPattern("VV yyyy年MM月dd日HH时mm分ss秒");
System.out.println(f.format(ZonedDateTime.now()));
LocalDate date = LocalDate.parse("2015-12-21",DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(date);
}
@Test
public void OldNewTrans(){
System.out.println("-------------新老日期的转换-------------------");
System.out.println("Calendar->instant:"+Calendar.getInstance().toInstant());
System.out.println("Date->instant:"+Calendar.getInstance().getTime().toInstant());
System.out.println("java.sql.Timestamp-> LocalDateTime:"+new Timestamp(new Date().getTime()).toLocalDateTime());
System.out.println("Instant->java.sql.Timestamp:"+Timestamp.from(Instant.now()));

}

}
结果分析:
---------------InstantDurationTest-------------
Instant getEpochSecond:1450681111
Instant getNano:794000000
System.currentTimeMillis():1450681111795
test function run in time(nano) :101000000,millis:101
检查两个duration相减是否为负数:true
from Calendar instant:2015-12-21T06:58:31.919Z
instant now :2015-12-21T06:58:32.060Z
------------LocalDate、TemporalAdjusters Test-------------
LocalDate today:2015-12-21
LocalDate 1988-01-01:1988-01-01
LocalDate 1988-01-01:1988-01-01
当年程序员日:1988-09-13
2015年1月31日加上一个月后的日期:2015-02-28
今天周几:1
月-日:12-21
年-月:2015-12
2016年的第一个周六:2016-01-02
2016年的1月的最后一个周五:2016-01-29
2016年的1月的第二个周五:2016-01-08
下一年的第一个集市:2016-01-05
--------------LocalTime------------
rightNow time:14:58:32.105
this time:11:14
--------------ZoneDateTime--------------
Asia/Aden,America/Cuiaba,Etc/GMT+9,Etc/GMT+8,Africa/Nairobi,America/Marigot,Asia/Aqtau,Pacific/Kwajalein,America/El_Salvador,Asia/Pontianak,Africa/Cairo,Pacific/Pago_Pago,Africa/Mbabane,Asia/Kuching,Pacific/Honolulu,Pacific/Rarotonga,America/Guatemala,Australia/Hobart,Europe/London,America/Belize,America/Panama,Asia/Chungking,America/Managua,America/Indiana/Petersburg,Asia/Yerevan,Europe/Brussels,GMT,Europe/Warsaw,America/Chicago,Asia/Kashgar,Chile/Continental,Pacific/Yap,CET,Etc/GMT-1,Etc/GMT-0,Europe/Jersey,America/Tegucigalpa,Etc/GMT-5,Europe/Istanbul,America/Eirunepe,Etc/GMT-4,America/Miquelon,Etc/GMT-3,...
2015-12-21T14:58:32.142+08:00[Asia/Shanghai]
2015-12-21T14:58:32.143+08:00[Asia/Shanghai]
2013年的3月21日,2:30不存在:2013-03-31T03:30+02:00[Europe/Berlin]
【错误】:2016年3月10日上午九点在柏林说:20天后这个点开会:2016-03-30T10:00+02:00[Europe/Berlin]
2016年3月10日上午九点在柏林说:20天后这个点开会:2016-03-30T09:00+02:00[Europe/Berlin]
-------------新老日期的转换-------------------
Calendar->instant:2015-12-21T06:58:32.148Z
Date->instant:2015-12-21T06:58:32.148Z
java.sql.Timestamp-> LocalDateTime:2015-12-21T14:58:32.149
Instant->java.sql.Timestamp:2015-12-21 14:58:32.149
------------------DateTimeFormatter test------------------
ISO_DATE_TIME:2015-12-21T14:58:32.15
BASIC_ISO_DATE:20151221
ISO_LOCAL_DATE_TIME:2015-12-21T14:58:32.15
ISO_LOCAL_DATE:2015-12-21
ISO_ORDINAL_DATE:2015-355
ISO_WEEK_DATE:2015-W52-1
2015-12-21 14:58:32
Asia/Shanghai 2015年12月21日14时58分32秒
2015-12-21
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: