Java基础|关于时间的API不可不知!(小白扫盲)

(推荐使用Java8新的时间API)

Java8新的时间API##

###1 Java8 java.time.* 下面的常用API
DateTimeFormatter
LocalDate
LocalDateTime
LocalTime
Clock
MonthDay
YearMonth

###2 java8时间API优点

  • [线程安全]java.time包下的所有类都是不可变类型且线程安全。老的时间API,java.util.Date为可变类型,以及SimpleDateFormat为非线程安全使其应用非常受限。

  • [格式化便捷]DateTimeFormatter类用来格式化和解析时间,线程安全。不用再依赖Joda Time第三方库。


  • [判断闰年]LocalDate类有一个很实用的方法isLeapYear()判断该实例是否是一个闰年。

  • [时间戳]增加了一个Clock时钟类用于获取当时的时间戳,或当前时区下的日期时间信息。以前用到System.currentTimeInMillis()和TimeZone.getDefault()的地方都可用Clock替换。

###3 示例代码

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

import org.junit.Test;

/**
 * @author gtc46052
 * @version $Id: JavaTime.java, v 0.1 2017年7月30日 上午10:11:14 gao tianci Exp $
 */
public class JavaTime {
	@Test
	public void test() {
		System.out.println("/************************************************************************************/");
		/************************************************************************************/
		// LocalDate;LocalTime;LocalDateTime 得到时间对象的一组方法,LocalDateTime最后一位是纳秒,1秒=1000
		// 000 000纳秒
		System.out.println("获取时间:");
		System.out.println("LocalDateTime.now()-->" + LocalDateTime.now());
		System.out.println("LocalDate.now()-->" + LocalDate.now());
		System.out.println("LocalTime.now()-->" + LocalTime.now());
		// 也都有of()方法,都有多个重载,灵活使用
		System.out.println("LocalDate.of(2017,05,10)-->" + LocalDate.of(2017, 05, 10));
		System.out.println("LocalTime.of(2017,05,10,22,33,44,1000)-->" + LocalTime.of(22, 33, 44, 1000));
		System.out.println(
				"LocalDateTime.of(2017,05,10,22,33,44,1000)-->" + LocalDateTime.of(2017, 05, 10, 22, 33, 44, 1000));
		// 可获取年,月,日,时,分,秒,纳秒
		System.out.println("LocalDateTime.now()-->" + LocalDateTime.now());
		System.out.println("LocalDateTime.now().getYear()-->" + LocalDateTime.now().getYear());
		System.out.println("LocalDateTime.now().getMonthValue()-->" + LocalDateTime.now().getMonthValue());
		System.out.println("LocalDateTime.now().getDayOfMonth()-->" + LocalDateTime.now().getDayOfMonth());
		System.out.println("LocalDateTime.now().getHour()-->" + LocalDateTime.now().getHour());
		System.out.println("LocalDateTime.now().getMinute()-->" + LocalDateTime.now().getMinute());
		System.out.println("LocalDateTime.now().getSecond()-->" + LocalDateTime.now().getSecond());
		System.out.println("LocalDateTime.now().getNano()-->" + LocalDateTime.now().getNano());
		System.out.println("/************************************************************************************/");
		/************************************************************************************/
		System.out.println("解析时间1:(去掉纳秒,秒等)");
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println("localDateTime-->" + localDateTime);
		System.out.println("localDateTime.withNano(0)-->" + localDateTime.withNano(0));
		System.out.println("localDateTime.withSecond(0)-->" + localDateTime.withSecond(0));
		System.out.println("localDateTime.withSecond(0)..withNano(0)-->" + localDateTime.withSecond(0).withNano(0));
		try {
			System.out
					.println("/************************************************************************************/");
			/************************************************************************************/
			// 一般使用自定义的格式来达到(字符串->时间)(时间->字符串),更加方便灵活
			System.out.println("格式化和解析时间2:(时间->字符串)");
			DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
			System.out.println("格式化为" + "yyyy-MM-dd hh:mm:ss-->" + LocalDateTime.now().format(format));
			System.out
					.println("/************************************************************************************/");
			/************************************************************************************/
			System.out.println("格式化和解析时间3:(字符串->时间)||可一次指定多格式字符串");
			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("[yyyy/MM/dd HH:mm:ss.SSSSSS]"
					+ "[yyyy-MM-dd HH:mm:ss]" + "[dd-MM-yyyy HH:mm:ss]" + "[ddMMyyyy HH:mm:ss]");
			System.out.println("[示例]指定可匹配的多格式:" + "[yyyy/MM/dd HH:mm:ss.SSSSSS]" + "[yyyy-MM-dd HH:mm:ss]"
					+ "[dd-MM-yyyy HH:mm:ss]" + "[ddMMyyyy HH:mm:ss]");
			System.out.println(LocalDateTime.parse("2016/03/23 22:33:44.256145", formatter));
			System.out.println(LocalDateTime.parse("2016-03-23 22:33:44", formatter));
			System.out.println(LocalDateTime.parse("23-05-2016 22:33:44", formatter));
			System.out.println(LocalDateTime.parse("23052016 22:33:44", formatter));
		} catch (Exception e) {
			System.out.println(e);
		}
	}
}

结果:

/************************************************************************************/
获取时间:
LocalDateTime.now()-->2017-07-30T15:24:23.841
LocalDate.now()-->2017-07-30
LocalTime.now()-->15:24:23.841
LocalDate.of(2017,05,10)-->2017-05-10
LocalTime.of(2017,05,10,22,33,44,1000)-->22:33:44.000001
LocalDateTime.of(2017,05,10,22,33,44,1000)-->2017-05-10T22:33:44.000001
LocalDateTime.now()-->2017-07-30T15:24:23.842
LocalDateTime.now().getYear()-->2017
LocalDateTime.now().getMonthValue()-->7
LocalDateTime.now().getDayOfMonth()-->30
LocalDateTime.now().getHour()-->15
LocalDateTime.now().getMinute()-->24
LocalDateTime.now().getSecond()-->23
LocalDateTime.now().getNano()-->842000000
/************************************************************************************/
解析时间1(去掉纳秒,秒等)
localDateTime-->2017-07-30T15:24:23.842
localDateTime.withNano(0)-->2017-07-30T15:24:23
localDateTime.withSecond(0)-->2017-07-30T15:24:00.842
localDateTime.withSecond(0)..withNano(0)-->2017-07-30T15:24
/************************************************************************************/
格式化和解析时间2(时间->字符串)
格式化为yyyy-MM-dd hh:mm:ss-->2017-07-30 03:24:23
/************************************************************************************/
格式化和解析时间3(字符串->时间)||可一次指定多格式字符串
[示例]指定可匹配的多格式:[yyyy/MM/dd HH:mm:ss.SSSSSS][yyyy-MM-dd HH:mm:ss][dd-MM-yyyy HH:mm:ss][ddMMyyyy HH:mm:ss]
2016-03-23T22:33:44.256145
2016-03-23T22:33:44
2016-05-23T22:33:44
2016-05-23T22:33:44

4 java老的时间API总结

这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章