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

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值