根据YYYYMMDD替换日期

public class EmailUtil {
private static final Pattern patternBody = Pattern.compile("\{([^}]*)\}");
/**
* {YYYYMMDD} {YYYYMM} {YYYY} {YYYYMMDD 24mil:mm:ss}
* {YYYYMM(last month)} {YYYYMMDD(last day of last month)}
* {YYYYMM(dd)(5th calendar of this month)} {YYYYMM(dd) (5th calendar of last month)}
**/
public static String parseBody(String body) {
String text = body;
Matcher m = patternBody.matcher(text);

        while (m.find()) {
            String parse = m.group();
            // 解析大括号里的内容
            String parseBody = parse.substring(1).substring(0, parse.length() - 2);

            // 1. 设置显示格式
             String showFormat = parseBody;
            // 日期显示格式 去掉小括号后的内容
            if (parseBody.indexOf("(") >= 0) {
                showFormat = showFormat.substring(0, parseBody.indexOf("("));
            }
           if (parseBody.indexOf("(dd)") >= 0 || parseBody.indexOf("(DD)") >= 0) {
                showFormat += "dd";
            }
          
            showFormat = showFormat.replace("DD", "dd");
            showFormat = showFormat.replace("24mil:mm:ss", "HH:mm:ss");

            // 2. 设置时间
            Date date = new Date();
            Calendar now = Calendar.getInstance();
             int lastLeftIndex = parseBody.lastIndexOf("(");
            int lastsRightIndex = parseBody.lastIndexOf(")");
            if (lastLeftIndex >= 0 && lastsRightIndex >= 0) {
            	 // 解析小括号里内容
                String changeFormat = parseBody.substring(lastLeftIndex + 1, lastsRightIndex);
               boolean status = changeFormat.contains(",");
                if(status){
                	changeFormat=changeFormat.substring(0,changeFormat.indexOf(","));
                	
                }else{
                	 changeFormat = parseBody.substring(lastLeftIndex+1, lastsRightIndex);	
                }
                changeFormat = changeFormat.replaceAll(" ", "");
                switch (changeFormat) {
                    case "lastmonth":
                        // 上个月
                        now.add(Calendar.MONTH, -1);
                        date = now.getTime();
                        break;
                    case "lastdayoflastmonth":
                        now.add(Calendar.MONTH, -1);
                        now.set(Calendar.DATE, now.getActualMaximum(Calendar.DATE));
                        date = now.getTime();
                        break;
                    case "lastyear":
                        now.add(Calendar.MONTH, -1);
                        now.add(Calendar.YEAR, -1);
                        date = now.getTime();
                        break;
                    
                }

                
                // 如果有两个小括号
                if (parseBody.indexOf("(") != parseBody.lastIndexOf("(")) {
                  // 上个月指定天数
                    if (changeFormat.indexOf("thcalendaroflastmonth") >= 0) {
                        now.add(Calendar.MONTH, -1);
                    }
                    // 获取具体天数
                    String day = changeFormat.substring(0, changeFormat.indexOf("th"));
                    int dayInt = Integer.parseInt(day);
                    int daySum = now.getActualMaximum(Calendar.DAY_OF_MONTH);
                    if (dayInt > daySum) {
                        dayInt = daySum;
                    }
                    now.set(Calendar.DATE, dayInt);
                    date = now.getTime();

                }
               
            }

            // 转换日期
            SimpleDateFormat f = new SimpleDateFormat(showFormat);
            String dateStr = f.format(date);

            text = text.replace(parse, dateStr);
        }
        text = text.replaceAll("<br>", "<br>\n");
        return text;
    }
    public static void main(String[] args) {
     String body=" Dear all, <br> {YYYYMM(dd)(6th calendar of last month)} {YYYYMMDD(last day of last month,eg:20190814)}  {YYYY09dd} {YYYYMMDD 24mil:mm:ss(last month)}";
    	System.out.println(EmailUtil.parseBody(body));
    	       }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值