JSP开发时, 在页面中格式化和解析日期始终是个头疼的事情. 可以用JSTL和JavaScript搞定.

1. JSTL格式化和解析日期

格式化日期:

< fmt:formatDate value = " ${model.date} "  pattern  = " yyyy-MM-dd "   >  

或者 

< fmt:formatDate value = " <%=new java.util.Date() %> "  pattern  = " yyyy-MM-dd "   />  

取得request参数: 

< c:out value = " param.参数名 " />  

jstl格式化日期标签收藏
<% @ taglib prefix = " c "  uri = " http://java.sun.com/jstl/core "   %>
<% @ taglib prefix = " fmt "  uri = " http://java.sun.com/jstl/fmt "   %>  

< fmt:parseDate value = " ${param.date} "  var = " date "  pattern = " yyyy/MM/dd:HH:mm:ss>
< fmt:parseDate value = " ${param.isoDate} "  var = " isoDate "  pattern = " yyyyMMdd'T'HHmmss " >  

The input parameters must match the patterns, or the JSP will thrown an exception. This page does no error handling. 

Input parameters:
Date:    
2004 / 04 / 01 : 13 : 30 : 00    Java format: Thu Apr  01   13 : 30 : 00  CST  2004
isoDate: 20040531T235959       Java format: Mon May 
31   23 : 59 : 59  CDT  2004  

Dates
Tag Output 
Attribute: value; required. Tag has no body. 
< fmt:formatDate value = " ${date} "  type = " both " />  

2004 - 4 - 1   13 : 30 : 00   
< fmt:formatDate value = " ${isoDate} "  type = " both " />  

2004 - 5 - 31   23 : 59 : 59   
Attribute: type; optional. Indicates what to print: date, time, or both. 
< fmt:formatDate value = " ${date} "  type = " date " />  

2004 - 4 - 1   
< fmt:formatDate value = " ${isoDate} "  type = " time " />  

23 : 59 : 59   
Attribute: dateStyle; optional. Varies the date format. 
< fmt:formatDate value = " ${isoDate} "  type = " date "  dateStyle = " default " />  

2004 - 5 - 31   
< fmt:formatDate value = " ${isoDate} "  type = " date "  dateStyle = " short " />  

04 - 5 - 31   
< fmt:formatDate value = " ${isoDate} "  type = " date "  dateStyle = " medium " />  

2004 - 5 - 31   
< fmt:formatDate value = " ${isoDate} "  type = " date "  dateStyle = " long " />  

2004年5月31日  
< fmt:formatDate value = " ${isoDate} "  type = " date "  dateStyle = " full " />  

2004年5月31日 星期一  
Attribute: timeStyle; optional. Varies the time format. 
< fmt:formatDate value = " ${isoDate} "  type = " time "  timeStyle = " default " />  

23 : 59 : 59   
< fmt:formatDate value = " ${isoDate} "  type = " time "  timeStyle = " short " />  

下午11:
59   
< fmt:formatDate value = " ${isoDate} "  type = " time "  timeStyle = " medium " />  

23 : 59 : 59   
< fmt:formatDate value = " ${isoDate} "  type = " time "  timeStyle = " long " />  

下午11时59分59秒  
< fmt:formatDate value = " ${isoDate} "  type = " time "  timeStyle = " full " />  

下午11时59分59秒 CDT  
Attribute: pattern; optional. Inidcates date
/ time custom patterns. 
< fmt:formatDate value = " ${date} "  type = " both "  pattern = " EEEE, MMMM d, yyyy HH:mm:ss Z " />  

星期四, 四月 
1 2004   13 : 30 : 00   - 0600   
< fmt:formatDate value = " ${isoDate} "  type = " both "  pattern = " d MMM yy, h:m:s a zzzz/> 
2. JavaScript 格式化 

/*
  将String类型解析为Date类型.
  parseDate('2006-1-1') return new Date(2006,0,1)
  parseDate(' 2006-1-1 ') return new Date(2006,0,1)
  parseDate('2006-1-1 15:14:16') return new Date(2006,0,1,15,14,16)
  parseDate(' 2006-1-1 15:14:16 ') return new Date(2006,0,1,15,14,16);
  parseDate('2006-1-1 15:14:16.254') return new Date(2006,0,1,15,14,16,254)
  parseDate(' 2006-1-1 15:14:16.254 ') return new Date(2006,0,1,15,14,16,254)
  parseDate('不正确的格式') retrun null
*/

function  parseDate(str) {
  
if(typeof str == 'string'){
    
var results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}*$/);
    
if(results && results.length>3)
      
return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3])); 
    results 
= str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}+(\d{1,2}):(\d{1,2}):(\d{1,2}*$/);
    
if(results && results.length>6)
      
return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3]),parseInt(results[4]),parseInt(results[5]),parseInt(results[6])); 
    results 
= str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}+(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,9}*$/);
    
if(results && results.length>7)
      
return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3]),parseInt(results[4]),parseInt(results[5]),parseInt(results[6]),parseInt(results[7])); 
  }

  
return null;
}
 

/*
  将Date/String类型,解析为String类型.
  传入String类型,则先解析为Date类型
  不正确的Date,返回 ''
  如果时间部分为0,则忽略,只返回日期部分.
*/

function  formatDate(v) {
  
if(typeof v == 'string') v = parseDate(v);
  
if(v instanceof Date){
    
var y = v.getFullYear();
    
var m = v.getMonth() + 1;
    
var d = v.getDate();
    
var h = v.getHours();
    
var i = v.getMinutes();
    
var s = v.getSeconds();
    
var ms = v.getMilliseconds();   
    
if(ms>0return y + '-+ m + '-+ d + ' ' + h + ':' + i + ':' + s + '.' + ms;
    
if(h>0 || i>0 || s>0return y + '-+ m + '-+ d + ' ' + h + ':' + i + ':' + s;
    
return y + '-+ m + '-+ d;
  }

  
return '';
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值