1. 程式人生 > >Java時間處理類 SimpleDateFormat物件的parse方法處理12點變成00點

Java時間處理類 SimpleDateFormat物件的parse方法處理12點變成00點

SimpleDateFormat是個用得很高頻率的時間處理類

該物件的倆個主要方法:

parse方法:將字串型別(java.lang.String)解析為日期型別(java.util.Date)

format方法:將日期型別(Date)資料格式化為字串(String)

問題:使用SimpleDateFormat物件format呼叫函式parse("時間字串")列印到12點和24點的時候都會變成00點

public static long getMinuteGap(String fromTime, String toTime) throws ParseException {  // 傳遞的引數計算到了秒鐘

		SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
		
		// 注意:遇到12點會變成00
		Date fromM = simpleFormat.parse(fromTime.substring(0, 16));    // 擷取到分鐘
	    Date toM = simpleFormat.parse(toTime.substring(0, 16)); 
	    System.out.println("擷取到分鐘的fromM:" + fromM.toString()); // 變成00:52了    
		System.out.println("擷取到分鐘的ToM:" + toM.toString());
		long from = fromM.getTime();  
		long to = toM.getTime();  
		int gap = (int) ((to - from) / (1000 * 60));  
		System.out.println("util.CountTimeGap 兩個時間之間的分鐘差gap為:" + gap);
		return gap;
	}
	
	public static void main(String[] args) throws ParseException {
		String fromTime="2018-09-21 12:52:16";
		String toTime = "2018-09-22 12:30:32";
		System.out.println(getMinuteGap(fromTime, toTime));
	}
擷取到分鐘的fromM:Fri Sep 21 00:52:00 CST 2018
擷取到分鐘的ToM:Sat Sep 22 00:30:00 CST 2018
util.CountTimeGap 兩個時間之間的分鐘差gap為:1418
1418

這裡主要是計算兩個時間字串對應的時間差(分鐘單位)多少輸入的12:52:16,12:30:32都變成了00:52:16,00:30:00.

原因:

new SimpleDateFormat("格式"),的引數格式 yyyy-MM-dd hh:mm, 小時打成了小寫的hh

HH是24小時制,hh是12小時制

此外:提醒下,SimpleDateFormat是執行緒不安全的,推薦為每個執行緒建立單獨的format例項。如果多執行緒併發訪問同一個format例項,必須加同步操作。