Java时间处理类 SimpleDateFormat对象的parse方法处理12点变成00点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenbetter1996/article/details/82812959

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实例,必须加同步操作。

猜你喜欢

转载自blog.csdn.net/chenbetter1996/article/details/82812959
今日推荐