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總結

這裏寫圖片描述

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