任意时间相互转换

package com.system.bus;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class ReactionTimeUtil {
	
	//将double计算的结果保留两位小数
	private static final DecimalFormat decimalFormat = new DecimalFormat("#0.00");    
	public static final String HOUR = "H";
	public static final String MINUTE = "M";
	public static final String SECOND = "S";
	 
	
	/**
	 * 
	 * @param reactionTimeStr  反应时长字符串
	 * @param timeUnit 需要转化的单位
	 * @param isLeft \如果为null 则取出所有,如果ture则取出"-"符号的左边,反之取出符号的右边
	 * 1-1h
	 * 1-2hours
	 * 1-3H
	 * 1-4HOURS
	 * 1m-1h
	 * 1h - 3h
	 * 1-5min
	 * 1s-10h
	 * 5-6
	 * 10m - 10h
	 * ≥ 10m
	 * @return
	 */
	
	public static String ConvertReactionTimePhaseValue(String reactionTimeStr,String toTimeUnit,Boolean isLeft) {
		StringBuffer resultBuffer  = new StringBuffer();
		//大于符号匹配串
		String gtMatchExpressionStr = "≥>>﹥≧";
		//小于符号匹配串
		String ltMatchExpressionStr = "<≤﹤≦"; 
		//开始时间
		String startTimeStr = "";
		//结束时间
		String endTimeStr = ""; 
		//大于符号的时间单位
		String gtTimeUnit = "";
		//小于符号的时间单位
		String ltTimeUnit = ""; 
		//先将空格置空
		reactionTimeStr = reactionTimeStr.replaceAll(" ", "");
		if(reactionTimeStr.contains("-")) {
			String[] reactionTimeArray =  reactionTimeStr.split("-");
			startTimeStr = reactionTimeArray[0];
			endTimeStr =  reactionTimeArray[1];
			  
			String startTimeUnit = getTimeUint(startTimeStr);
			String endTimeUnit = getTimeUint(endTimeStr);
			
			//如果开始时间没有单位并且结束时间也没有单位则默认按照小时计算
			if("".equals(startTimeUnit) && "".equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,HOUR ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,HOUR ,toTimeUnit); 
			}
			//如果开始时间是空结束时间单位是小时
			if("".equals(startTimeUnit) && HOUR.equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,HOUR ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,HOUR ,toTimeUnit); 
			}
			//如果开始时间是空结束时间单位是分钟
			if("".equals(startTimeUnit) && MINUTE.equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,MINUTE ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,MINUTE ,toTimeUnit); 
			}
			//如果开始时间是空结束时间单位是秒钟
			if("".equals(startTimeUnit) && SECOND.equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,SECOND ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,SECOND ,toTimeUnit); 
			}
			//如果开始时间是单位是小时,结束时间单位是空
			if(HOUR.equals(startTimeUnit) && "".equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,HOUR ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,HOUR ,toTimeUnit); 
			}
			//如果开始时间是单位是小时,结束时间单位是小时
			if(HOUR.equals(startTimeUnit) && HOUR.equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,HOUR ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,HOUR ,toTimeUnit); 
			}
			//如果开始时间是单位是分钟,结束时间单位是分钟
			if(MINUTE.equals(startTimeUnit) && "".equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,MINUTE ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,HOUR ,toTimeUnit); 
			}
			//如果开始时间是单位是秒钟,结束时间单位是秒钟
			if(SECOND.equals(startTimeUnit) && "".equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,SECOND ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,HOUR ,toTimeUnit); 
			}
			//如果开始时间是单位是分钟,结束时间单位是小时
			if(MINUTE.equals(startTimeUnit) && HOUR.equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,MINUTE ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,HOUR ,toTimeUnit); 
			}
			//如果开始时间是单位是秒钟,结束时间单位是小时
			if(SECOND.equals(startTimeUnit) && HOUR.equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,SECOND ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,HOUR ,toTimeUnit); 
			}
			//如果开始时间是单位是秒钟,结束时间单位是秒钟
			if(SECOND.equals(startTimeUnit) && SECOND.equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,SECOND ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,SECOND ,toTimeUnit); 
			}
			//如果开始时间是单位是秒钟,结束时间单位是分钟
			if(SECOND.equals(startTimeUnit) && MINUTE.equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,SECOND ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,MINUTE ,toTimeUnit); 
			}
			//如果开始时间是单位是分钟,结束时间单位是分钟
			if(MINUTE.equals(startTimeUnit) && MINUTE.equals(endTimeUnit) ) {
				startTimeStr = convertAnyTime(startTimeStr,MINUTE ,toTimeUnit);
				endTimeStr = convertAnyTime(endTimeStr,MINUTE ,toTimeUnit); 
			}
			//是否只显示左边,如果为空则显示全部,如果是则只取左边的值,如果不是则取右边的值
			if(isLeft == null) {
				resultBuffer.append(startTimeStr);
				resultBuffer.append("-");
				resultBuffer.append(endTimeStr);
				
			}else {
				if(isLeft) {
					resultBuffer.append(startTimeStr);
				}else {
					resultBuffer.append(endTimeStr);		
				} 
			} 
		}else {
			//查看字符串中是否包含大于符号
			for(int i = 0; i < gtMatchExpressionStr.length(); i++) {
				char matchSimple = gtMatchExpressionStr.charAt(i);
				if(reactionTimeStr.indexOf(matchSimple) > -1) {
					String currentSimple = String.valueOf(matchSimple);
					if(isLeft == null) {
						resultBuffer.append(currentSimple); 
					}
					reactionTimeStr = reactionTimeStr.replaceAll(currentSimple, "");
					//大于符号的时间单位
					gtTimeUnit = getTimeUint(reactionTimeStr);
					break;
				}
			}
			//查看字符串中是否包含小于符号
			for(int i = 0; i < ltMatchExpressionStr.length(); i++) {
				char matchSimple = ltMatchExpressionStr.charAt(i);
				if(reactionTimeStr.indexOf(matchSimple) > -1) {
					String currentSimple = String.valueOf(matchSimple);
					if(isLeft == null) {
						resultBuffer.append(currentSimple); 
					}
					reactionTimeStr = reactionTimeStr.replaceAll(currentSimple, "");
					//小于符号的时间单位
					ltTimeUnit = getTimeUint(reactionTimeStr); 
					break;
				}
			}
			//如果带有大于符号的元素单位是小时
			if(HOUR.equals(gtTimeUnit) || "".equals(gtTimeUnit) ) { 
				resultBuffer.append(convertAnyTime(reactionTimeStr,HOUR ,toTimeUnit));
			}
			//如果带有大于符号的元素单位是分钟
			if(MINUTE.equals(gtTimeUnit)) { 
				resultBuffer.append(convertAnyTime(reactionTimeStr,MINUTE ,toTimeUnit));
			}
			//如果带有大于符号的元素单位是秒钟
			if(SECOND.equals(gtTimeUnit)) { 
				resultBuffer.append(convertAnyTime(reactionTimeStr,SECOND ,toTimeUnit));
			}
			//如果带有小于符号的元素单位是小时
			if(HOUR.equals(ltTimeUnit)) { 
				resultBuffer.append(convertAnyTime(reactionTimeStr,HOUR ,toTimeUnit));
			}
			//如果带有小于符号的元素单位是分钟
			if(MINUTE.equals(ltTimeUnit)) { 
				resultBuffer.append(convertAnyTime(reactionTimeStr,MINUTE ,toTimeUnit));
			}
			//如果带有小于符号的元素单位是秒钟
			if(SECOND.equals(ltTimeUnit)) { 
				resultBuffer.append(convertAnyTime(reactionTimeStr,SECOND ,toTimeUnit));
			}  
		}  
		
		return resultBuffer.toString();
	}
	
	
	
	/** 
	 * @param timeStr
	 * @desc  输入字符串获取时间单位比如 1h 或者 1hour 返回H
	 * @return
	 * 
	 */
	public static String getTimeUint(String timeStr) {
		String currentTimeUnit = "";
		HashMap<String,String> timeUnitHashMap = new HashMap<>();
		timeUnitHashMap.put("h", HOUR);
		timeUnitHashMap.put("hour", HOUR);
		timeUnitHashMap.put("hours", HOUR);
		timeUnitHashMap.put("H", HOUR);
		timeUnitHashMap.put("m", MINUTE);
		timeUnitHashMap.put("min", MINUTE);
		timeUnitHashMap.put("minute", MINUTE);
		timeUnitHashMap.put("minutes", MINUTE);
		timeUnitHashMap.put("M", MINUTE); 
		timeUnitHashMap.put("s", SECOND);
		timeUnitHashMap.put("second", SECOND);
		timeUnitHashMap.put("seconds", SECOND);
		timeUnitHashMap.put("S", SECOND);  
		for(String timeUnit:timeUnitHashMap.keySet()) {
			if(timeStr.contains(timeUnit)) {
				currentTimeUnit = timeUnitHashMap.get(timeUnit);
				break;
			}
		} 
		return currentTimeUnit;
	}
	
	
	/**
	 * 
	 * @param reactionTime 反应时间
	 * @param currentUnit 当前时间单位 h,m,s
	 * @param convertUnit 需要转化的单位 h,m,s
	 * @return 转换后的值
	 * @desc 输入反应时间比如 1h 当前单位h,转化为目标单位比如s
	 */
	public static String convertAnyTime(String reactionTime,String currentUnit,String convertUnit) {
		String result = "";
		if(HOUR.equals(currentUnit)) {
			reactionTime = reactionTime.replaceAll("hours", "").replaceAll("hour", "").replaceAll("h", "").replaceAll("H", "");
			Long reactionTimeLongValue = Long.parseLong(reactionTime);
			if(HOUR.equals(convertUnit)) {
				result = String.valueOf(reactionTimeLongValue);
			}
			if(MINUTE.equals(convertUnit)) {
				result = String.valueOf(TimeUnit.HOURS.toMinutes(reactionTimeLongValue));  
			}
			if(SECOND.equals(convertUnit)) {
				result = String.valueOf(TimeUnit.HOURS.toSeconds(reactionTimeLongValue));
			} 
		}
		
		if(MINUTE.equals(currentUnit)) {
			reactionTime = reactionTime.replaceAll("minute", "").replaceAll("min", "").replaceAll("m", "");
			Long reactionTimeLongValue = Long.parseLong(reactionTime);
			if(HOUR.equals(convertUnit)) {
				result = decimalFormat.format(reactionTimeLongValue/60d);
			}
			if(MINUTE.equals(convertUnit)) {
				result = String.valueOf(reactionTimeLongValue);
			}
			if(SECOND.equals(convertUnit)) {
				result = String.valueOf(TimeUnit.MINUTES.toSeconds(reactionTimeLongValue));
			} 
		}
		
		if(SECOND.equals(currentUnit)) {
			reactionTime = reactionTime.replaceAll("second", "").replaceAll("s", "").replaceAll("S", "");
			Long reactionTimeLongValue = Long.parseLong(reactionTime);
			if(HOUR.equals(convertUnit)) {
				result = decimalFormat.format(reactionTimeLongValue/3600d);
			}
			if(MINUTE.equals(convertUnit)) {
				result = decimalFormat.format(reactionTimeLongValue/60d);
			}
			if(SECOND.equals(convertUnit)) {
				result = String.valueOf(reactionTimeLongValue);
			} 
		}
		
		return result;
	}
	 
	
	public static void main(String[] args) {
		List<String> checkList = new ArrayList<>();
		checkList.add("1  -   1");
		checkList.add(" 1 -2  h ");
		checkList.add("1-2H");
		checkList.add("1-2hour"); 
		checkList.add("5min-2h");
		checkList.add("5s-2h");
		checkList.add("5min-2min");
		checkList.add("5m-2min");
		checkList.add(">10min");
		checkList.add("≥26");
		for(String timePhase:checkList) {
			System.out.println(ConvertReactionTimePhaseValue(timePhase,ReactionTimeUtil.SECOND,null));
		}
	}
	
	
	
}

 任意时间转小时

任意时间转分钟

任意时间转秒钟

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、列举常用的java系统包?哪个包不需要用import导入? 2、如何获取字符串长度、数组长度? 3、如何判断两个字符串是否相等? 4、如何获取字符串指定位置的字符? 5、怎样把字符串转小写或大写? 6、如何去除字符串首尾空格? 7、怎样判断一个字符串是否以另外字符串开头或结束? 8、使用String对象的求子串方法substring()要注意什么?“abcde".substring(0,3)的结果是什么? 9、如何判断一个字符串是另一个的子串? 10、将一个字符串按指定定界符分割成字符串数组用什么方法,举例说明。 11、字符串和字符数组如何相互转换? 12、String和StringBuffer的区别,如何互相转化? 13、如何求字符串的逆序字符串? 14、Integer类中2,8,16进制=》10进制,10进制转2,8,16进制的方法。 15、获取给定日期(比如你的生日)星期几的方法,举例说明。 16、字符串和整数(实数)之间互相转换的方法? 17、如何计算一段代码的执行时间? 18、如何实现两个数组内容的拷贝? 19、已知window下任意文件名,返回该文件的扩展名。 20、以"年-月-日 小时:分钟:秒"的格式显示当前时间,年4位,月、日、小时、分钟、秒占2位,小时是24进制的。 21、任给两个日期,求它们相差的天数?(可考虑用日期时间类实现),给出1990-10-1和2000-3-1相差的天数的结果值。
04-21

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bruce_suxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值