中文时间转换器

//大家有什么好的建议可以提哦

//直接上代码
package com.jd.jnlu.core.utils;

import com.google.common.collect.Maps;
import com.jd.jsf.gd.util.StringUtils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateUtil {

private static final Map<Character, Character> NUM_MAPPER;
private static Pattern pattern = Pattern.compile("(\\d{1,2}小?时)*零?(\\d{1,2}分钟?)*零?(\\d{1,2}秒钟?)*");
private static Pattern hourPattern = Pattern.compile("(\\d{1,2})小?时");
private static Pattern minutePattern = Pattern.compile("(\\d{1,2})分钟?");
private static Pattern secondPattern = Pattern.compile("(\\d{1,2})秒钟?");


static {
    NUM_MAPPER = Maps.newHashMap();
    NUM_MAPPER.put('零', '0');
    NUM_MAPPER.put('一', '1');
    NUM_MAPPER.put('二', '2');
    NUM_MAPPER.put('两', '2');
    NUM_MAPPER.put('三', '3');
    NUM_MAPPER.put('四', '4');
    NUM_MAPPER.put('五', '5');
    NUM_MAPPER.put('六', '6');
    NUM_MAPPER.put('七', '7');
    NUM_MAPPER.put('八', '8');
    NUM_MAPPER.put('九', '9');
}


//2017/11/01 00::00:00-2017/11/11 23:59:59
public static boolean checkTimeLimit(String dateLimit) {
    if (StringUtils.isNotBlank(dateLimit)) {
        String[] dateData = dateLimit.split("-");
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        if (dateData.length < 2) return false;
        String current = format.format(new Date());
        if (current.compareTo(dateData[0]) >= 0 && current.compareTo(dateData[1]) <= 0) {
            return true;
        }
    }
    return false;
}


public static long convertTimeString(String timeString) {
    timeString = timeString.replaceAll(" ", "");
    timeString = NumberConverter.convertNumbers(timeString);
    StringBuilder stringBuilder = new StringBuilder("");
    for (char ch : timeString.toCharArray()) {
        Character digit = NUM_MAPPER.get(ch);
        if (digit != null) {
            stringBuilder.append(digit);
        } else if ('十' == ch) {//special case, do not add it into NUM_MAPPER;
            stringBuilder.append("10");
        } else {
            stringBuilder.append(ch);
        }
    }
    timeString = stringBuilder.toString();
    Matcher matcher = pattern.matcher(timeString);
    long result = 0;
    if (matcher.find()) {
        String hourString = matcher.group(1);
        String minuteString = matcher.group(2);
        String secondString = matcher.group(3);
        if (hourString != null) {
            matcher = hourPattern.matcher(hourString);
            if (matcher.find()) {
                int hour = Integer.parseInt(matcher.group(1));
                result += hour * 3600;
            }
        }
        if (minuteString != null) {
            matcher = minutePattern.matcher(minuteString);
            if (matcher.find()) {
                int minute = Integer.parseInt(matcher.group(1));
                result += minute * 60;
            }
        }
        if (secondString != null) {
            matcher = secondPattern.matcher(secondString);
            if (matcher.find()) {
                int second = Integer.parseInt(matcher.group(1));
                result += second;
            }
        }
    }
    return result;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值