日期 字符串截取 格式化 标签

本文介绍如何通过自定义JSP标签实现日期格式化和字符串截取功能,包括DateTag和SubTag两个标签的实现细节,并提供实际应用场景示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.java类文件 放到 src的包中
2.tld文件 放到web.xml同级位置,根据类所在包 进行 改写tld文件
3.jsp页面上导入的标签及使用

<%@ taglib prefix="my" uri="/WEB-INF/mytags.tld"%>
日期格式化:
<my:date value="${lawsublise.ci_ctime}" format="yy-MM"/>
字符串截取:
<my:sub endStr="" maxByte="30" value="${lawsublise.ci_title}"/>


[size=large][color=red][b]DateTag.java[/b][/color][/size]

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class DateTag extends TagSupport
{
private static final long serialVersionUID = 1047009839984509708L;
private Object value;
private String format;
private String inFormat;

public Object getValue()
{
return value;
}

public void setValue(Object value)
{
this.value = value;
}

public String getFormat()
{
return format;
}

public void setFormat(String format)
{
this.format = format;
}

public int doStartTag() throws JspException
{
JspWriter out = pageContext.getOut();
String fmt = "yyyy-MM-dd HH:mm:ss";
if (format != null)
{
fmt = format;
}
SimpleDateFormat sdf = new SimpleDateFormat(fmt);
if (value != null)
{
if (value.getClass().getSimpleName().equals("Date"))
{
Date date = (Date) value;
try
{
out.print(sdf.format(date));
} catch (IOException e)
{
}
} else if (value.getClass().getSimpleName().equals("String"))
{
try
{
if(inFormat!=null){
Date date = DateUtil.parseDate(value.toString(),inFormat);
out.print(sdf.format(date));
}else{
Date date = DateUtil.parseDate(value.toString());
out.print(sdf.format(date));
}
} catch (Exception e)
{
}
}
} else
{
}
return SKIP_BODY;
}

public String getInFormat()
{
return inFormat;
}

public void setInFormat(String inFormat)
{
this.inFormat = inFormat;
}

}


[size=large][color=red][b]DateUtil.java[/b][/color][/size]

import java.text.ParseException;
import java.util.Date;

/**
* 日期工具类
*
* @author lipinliang
*/
public abstract class DateUtil extends org.apache.commons.lang.time.DateUtils {

/**
* 默认日期格式
*/
private static final String[] parsePatterns = new String[] {
"yyyy-MM-dd HH:mm:ss",
"yyyy-MM-dd",
"yyyy/MM/dd HH:mm:ss",
"yyyy/MM/dd",
"yyyyMMddHHmmss",
"yyyyMMddHHmm",
"yyyyMMdd"
// 这里可以增加更多的日期格式,用得多的放在前面
};

/**
* 使用默认的日期格式将字符串转换为日期
*
* @param str 要转换的字符串
* @return 转换后的日期
* @throws ParseException 没有匹配的日期格式
*/
public static Date parseDate(String str) throws ParseException {
return DateUtil.parseDate(str, parsePatterns);
}

/**
* 使用给定的日期格式将字符串转换为日期
*
* @param str 要转换的字符串
* @param parsePattern 日期格式字符串
* @return 转换后的日期
* @throws ParseException 日期格式不匹配
*/
public static Date parseDate(String str, String parsePattern) throws ParseException {
return DateUtil.parseDate(str, new String[] { parsePattern });
}

}


[size=large][color=red][b]SubTag.java[/b][/color][/size]

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class SubTag extends TagSupport
{
private String value;
private int maxByte;
private String endStr;
private static final long serialVersionUID = -6878642038499468567L;

public int doStartTag() throws JspException
{
JspWriter out = pageContext.getOut();
try
{
out.print(subString(value, maxByte, endStr));
} catch (Exception e)
{
}
return SKIP_BODY;
}

/**
* 按字节长度截取字符串
* @param str:源字符串
* @param maxbyte: 字符串的byte限制
* @param endStr: 如果超出最大byte,结尾省略字符串
* @return String Object
* @author Yu
*/
public static String subString(String str, int maxByte, String endStr)
{
if (str == null || "".equals(str))
{
// 如果源字符串为空或null,返回空字符串
str = "";
} else
{
// 计算字节长度
int byteLength = 0;
// 计算字符长度
int charLength = 0;
for (; charLength < str.length(); charLength++)
{
// 计算每个字符的字节数,每个汉字+2byte,其它+1
byteLength = (int) str.charAt(charLength) > 256 ? byteLength + 2 : byteLength + 1;
// 超过最大限制字节时,按当前charLength截取字符串
if (byteLength > maxByte)
{
// 当前长度减去结尾省略字符串的长度的一半(此处将省略字符串假设为半字节字符)
charLength = charLength - endStr.length() / 2;
// 截取字符串,加上省略字符串
str = str.substring(0, charLength > 0 ? charLength : 0) + endStr;
// 跳出循环
break;
}
}
}
return str;
}

public String getValue()
{
return value;
}

public void setValue(String value)
{
this.value = value;
}

public int getMaxByte()
{
return maxByte;
}

public void setMaxByte(int maxByte)
{
this.maxByte = maxByte;
}

public String getEndStr()
{
return endStr;
}

public void setEndStr(String endStr)
{
this.endStr = endStr;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值