好长时间没有来ITeYe, 回顾上一篇文章时,觉得有必要配合上一篇文章《Javascript日期的Format与Parse》把完整的代码贴出来,也算代表自己没有继续潜水。
$package("js.text");
$import("js.text.Format");
$import("js.util.LinkedList");
js.text.SimpleDateFormat = function(pattern, DateFormatSymbols){
var CLASS = js.text.SimpleDateFormat, thi$ = CLASS.prototype;
if(CLASS.__defined__){
this._init.apply(this, arguments);
return;
}
CLASS.__defined__ = true;
var Class = js.lang.Class, System = J$VM.System;
var TOKEN = /yy(?:yy)?|M{1,}|d{1,2}|E{1,}|([Hhms])\1?|S(?:SS)?|[azZG]|"[^"]*"|'[^']*'/g;
var Regx = {
yy : "(\\d{2})", yyyy : "(\\d{4})", G : "(\\S+)",
M : "([1-9]|1[012])", MM : "(0[1-9]|1[012])",
MMM : "(\\S+)", MMMM : "(\\S+)",
d : "([1-9]|[12][0-9]|3[01])", dd : "(0[1-9]|[12][0-9]|3[01])",
E : "(\\S+)", EE : "(\\S+)", EEE : "(\\S+)", EEEE : "(\\S+)",
H : "([0-9]|1[0-9]|2[0-3])", HH : "(0[0-9]|1[0-9]|2[0-3])",
h : "([1-9]|1[012])", hh : "(0[1-9]|1[012])", a : "(\\S+)",
m : "([0-9]|[1-5][0-9])", mm : "([0-5][0-9])",
s : "([0-9]|[1-5][0-9])", ss : "([0-5][0-9])",
S : "(\\d{1,3})", SSS : "(\\d{3})",
z : "(\\S+)", Z : "([\\-\\+]\\d{2,4})"
};
var Getter = new function(){
var _pad = function(val, len){val = "000"+String(val); return val.slice(val.length - (len || 2)); };
var _week = function(D,$,b){return b ? D.getUTCDay() : D.getDay();};
this.yy = function(D,$,b){return _pad(this.yyyy(D,$,b), 2);};
this.yyyy = function(D,$,b){return _pad((b ? D.getUTCFullYear() : D.getFullYear()), 4);};
this.M = function(D,$,b){return ( b ? D.getUTCMonth() : D.getMonth())+1;};
this.MM = function(D,$,b){return _pad(this.M(D,$,b), 2);};
this.MMM = function(D,$,b){return $.getShortMonths()[this.M(D,$,b) - 1];};
this.MMMM = function(D,$,b){return $.getMonths()[this.M(D,$,b) - 1];};
this.d = function(D,$,b){return b ? D.getUTCDate() : D.getDate();};
this.dd = function(D,$,b){return _pad(this.d(D,$,b), 2);};
this.E = function(D,$,b){return $.getShortWeekdays()[_week(D,$,b)];};
this.EE = function(D,$,b){return $.getShortWeekdays()[_week(D,$,b)];};
this.EEE = function(D,$,b){return $.getShortWeekdays()[_week(D,$,b)];};
this.EEEE = function(D,$,b){return $.getWeekdays()[_week(D,$,b)];};
this.H = function(D,$,b){return b ? D.getUTCHours() : D.getHours();};
this.HH = function(D,$,b){return _pad(this.H(D,$,b), 2);};
this.h = function(D,$,b){return this.H(D,$,b) % 12 || 12;};
this.hh = function(D,$,b){return _pad(this.h(D,$,b), 2);};
this.m = function(D,$,b){return b ? D.getUTCMinutes() : D.getMinutes();};
this.mm = function(D,$,b){return _pad(this.m(D,$,b), 2);};
this.s = function(D,$,b){return b ? D.getUTCSeconds() : D.getSeconds();};
this.ss = function(D,$,b){return _pad(this.s(D,$,b));};
this.S = function(D,$,b){return b ? D.getUTCMilliseconds() : D.getMilliseconds();};
this.SSS = function(D,$,b){return _pad(this.S(D,$,b), 3);};
this.a = function(D,$,b){return $.getAmPmStrings()[this.H(D,$,b) < 12 ? 0:1];};
this.G = function(D,$,b){return $.getEras()[parseInt(this.yyyy(D,$,b),10) < 0 ? 0:1];};
this.z = function(D,$,b){return b ? "UTC" : (String(D).match(js.text.SimpleDateFormat.TIMEZONE) || [""]).pop().replace(/[^-+\dA-Z]/g, "");};
this.Z = function(D,$,b){var o = D.getTimezoneOffset(), ao = Math.abs(o);return (o > 0 ? "-" : "+") + _pad(Math.floor(ao/60)*100 + ao%60, 4);};
};
var Setter = new function(){
this.yy = function(D,v,$,b){return this.yyyy(D,v,$,b);};
this.yyyy = function(D,v,$,b){var y = parseInt(v, 10); D.y = (y > 0 && D.bc) ? 0-y : y; b ? D.setUTCFullYear(D.y) : D.setFullYear(D.y); return D;};
this.M = function(D,v,$,b){var M = parseInt(v, 10)-1; b ? D.setUTCMonth(M) : D.setMonth(M); return D;};
this.MM = function(D,v,$,b){return this.M(D,v,$,b);};
this.MMM = function(D,v,$,b){var i = $.getShortMonths().indexOf(v); return i !=-1 ? this.M(D,i+1,$,b) : D;};
this.MMMM = function(D,v,$,b){var i = $.getMonths().indexOf(v); return i !=-1 ? this.M(D,i+1,$,b) : D;};
this.d = function(D,v,$,b){var d = parseInt(v,10); b ? D.setUTCDate(d) : D.setDate(d); return D;};
this.dd = function(D,v,$,b){return this.d(D,v,$,b);};
this.E = function(D,v,$,b){return D;};
this.EE = function(D,v,$,b){return D;};
this.EEE = function(D,v,$,b){return D;};
this.EEEE = function(D,v,$,b){return D;};
this.H = function(D,v,$,b){var h = parseInt(v, 10); D.h = (h < 12 && D.pm) ? (h+12)%24 : h; b ? D.setUTCHours(D.h) : D.setHours(D.h); return D;};
this.HH = function(D,v,$,b){return this.H(D,v,$,b);};
this.h = function(D,v,$,b){return this.H(D,v,$,b);};
this.hh = function(D,v,$,b){return this.H(D,v,$,b);};
this.m = function(D,v,$,b){var m = parseInt(v, 10); b ? D.setUTCMinutes(m) : D.setMinutes(m); return D;};
this.mm = function(D,v,$,b){return this.m(D,v,$,b);};
this.s = function(D,v,$,b){var s = parseInt(v, 10); b ? D.setUTCSeconds(s) : D.setSeconds(s); return D;};
this.ss = function(D,v,$,b){return this.s(D,v,$,b);};
this.S = function(D,v,$,b){var S = parseInt(v, 10); b ? D.setUTCMilliseconds(S) : D.setMilliseconds(S); return D;};
this.SSS = function(D,v,$,b){return this.S(D,v,$,b);};
this.a = function(D,v,$,b){switch($.getAmPmStrings().indexOf(v)){case 0:D.am = true;return (D.h && D.h == 12) ? this.H(D, 0, $, b) : D;case 1:D.pm = true;return D.h ? this.H(D, D.h, $, b) : D;}return D;},
this.G = function(D,v,$,b){if($.getEras().indexOf(v) === 0){D.bc = true; return D.y ? this.yyyy(D, D.y, $, b) : D;}return D;};
this.z = function(D,v,$,b){return D;};
this.Z = function(D,v,$,b){return D;};
};
/**
* Set format pattern
*
* @param pattern, String type
*/
thi$.setPattern = function(pattern){
pattern = this.pattern = pattern || "EEE MMM dd HH:mm:ss yyyy";
CLASS.infos = CLASS.infos || {};
var info = CLASS.infos[pattern];
if(info) return;
info = CLASS.infos[pattern] = {};
var pIndex = info.pIndex = js.util.LinkedList.newInstance();
var str = pattern.replace(
TOKEN,
function($0){
var t = $0.charAt(0);
$0 = ((t == 'M' || t == 'E') && $0.length > 4) ?
$0.slice(0, 4) : $0;
if(typeof Setter[$0] === "function"){
pIndex.push($0);
return Regx[$0];
}
if($0.length >= 2){
$0 = $0.replace(/"|'/g, "");
}
return $0;
});
info.dPattern = new RegExp(str);
}.$override(this.setPattern);
/**
* Set format symbols
*
* @see js.text.DateFormatSymbols
*/
thi$.setDateFormatSymbols = function(DateFormatSymbols){
this.symbols = DateFormatSymbols ||
new(Class.forName("js.text.DateFormatSymbols"))();
};
/**
* @see js.text.Format
*/
thi$.setSymbols = function(symbols){
this.symbols = symbols ||
new(Class.forName("js.text.DateFormatSymbols"))();
}.$override(this.setSymbols);
/**
* Return a formatted string of the specified date
*
* @param date, Date type, if null use current date
* @param isUTC, boolean type, whether is UTC
*
* @return String
*/
thi$.format = function(date, isUTC){
date = date ? date : new Date();
if(!Class.isDate(date)){
return date;
}
var _symbols = this.symbols;
return this.pattern.replace(
TOKEN,
function($0){
var t = $0.charAt(0);
$0 = ((t == 'M' || t == 'E') && $0.length > 4) ?
$0.slice(0, 4) : $0;
return (typeof Getter[$0] === "function") ?
Getter[$0](date, _symbols, isUTC) :
$0.slice(1, $0.length-1);
});
}.$override(this.format);
/**
* Return a <code>Date<code> object from a date string
*
* @param datestr, String type
* @param isUTC, boolean type, whether is UTC
*
* @return Date
*/
thi$.parse = function(datestr, isUTC){
var info = CLASS.infos[this.pattern],
pIndex = info.pIndex, _symbols = this.symbols,
date, m = datestr.match(info.dPattern),$0;
if(m){
date = new Date(0);
for(var i=1, len = m.length; i<len; i++){
$0 = pIndex[i-1];
date = Setter[$0](date, m[i], _symbols, isUTC);
}
return date;
}
try{
date = new Date(Date.parse(datestr));
} catch (x) {
}
if(!Class.isDate(date))
throw SyntaxError("Invalid date string");
return date;
}.$override(this.parse);
this._init.apply(this, arguments);
}.$extend(js.text.Format);
if(Date.SF === undefined){
Date.SF = new js.text.SimpleDateFormat();
Date.prototype.$format = function(pattern, isUTC){
if(pattern) Date.SF.setPattern(pattern);
return Date.SF.format(this, isUTC);
};
Date.$parse = function(datestr, pattern, symbols, isUTC){
if(pattern) Date.SF.setPattern(pattern);
if(symbols) Date.SF.setSymbols(symbols);
return Date.SF.parse(datestr, isUTC);
};
}
分享到:
相关推荐
然而,与传统插件元件不同,贴片元件往往只有丝印代码标识,而不是完整的型号,这给识别和选用带来了挑战。"贴片元件代码查询"这个资料正是为了解决这个问题,提供了常见贴片二极管、三极管等元件的代码与型号对照...
在这个名为“一个完整的个人博客的html源代码”的项目中,我们拥有一个由ASP(Active Server Pages)技术构建的个人博客的源代码。ASP是一种由微软开发的服务器端脚本环境,用于生成动态交互式网页。它允许开发者在...
这个标题表明我们正在讨论的是一款名为“wxhNotePad”的文本编辑器的完整源代码。通常,这样的项目是一个简单的文本处理应用程序,类似于Windows内置的记事本,但可能具有额外的功能或定制化选项。源代码是程序的...
【标签】"千年完整代码.rar" 该标签是文件的标识,用于快速识别文件内容,强调了这是一份完整的代码集合,可能对于理解和复现"千年"项目具有重要意义。 【压缩包子文件的文件名称列表】: 1. **FastNet.v5.6.3.D5-7....
对于有志于游戏开发或者对《龙族》有深厚感情的玩家来说,这份源代码是一份宝贵的资料。它可以用于学习游戏设计原理,研究过去的开发技术,甚至可以作为基础进行新的游戏开发或模组制作。同时,对于想要复刻或者改进...
总之,这份标题为"驱动程序电源管理处理完整参考代码.pdf"的文档是一份详尽的指南,它覆盖了WDM驱动程序中电源管理的核心概念和实现细节,特别适合那些已经有WDM USB驱动编写经验的开发者。通过理解IRP_MJ_POWER及...
这份源代码包含了一系列实例和深度解析,适合初学者和有经验的开发者。 首先,我们要明白JavaScript的基础概念。它是一种解释型、弱类型、基于原型的脚本语言,主要应用于Web浏览器,但也可在服务器端(如Node.js)...
Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而著名。这个压缩包包含了164个完整的Java代码示例,旨在帮助初学者和有...无论是初学者还是有经验的开发者,这个压缩包都是一份宝贵的资源。
这个项目对于学习移动应用开发,尤其是对Android或iOS平台有兴趣的开发者来说,是一份宝贵的参考资料。小巫博主在编程社区中以分享技术知识著称,而这个项目则为开发者提供了一个实际的、可操作的学习平台,让人们...
根据提供的文件信息,我们可以推断出这是一份包含164个完整Java代码的资源集合。这份资料被视为经典,不仅因为它包含了丰富的示例代码,还因为它可能是与Java编程相关的书籍或教程的一部分。接下来,我们将从标题、...
本资源提供了一份完整的五子棋程序源代码,旨在帮助学习者理解计算机博弈的基本原理和实现方法。这份源代码详细且注释清晰,适合初学者和有一定编程基础的人士进行学习。 一、源代码结构分析 1. 主程序模块:这是...
总的来说,"贪吃蛇完整代码"项目不仅提供了游戏编程的实践经验,还涵盖了嵌入式开发的关键技术,对于想要进入嵌入式领域或提升编程技能的初学者来说,是一份宝贵的资源。通过这个项目,学习者可以逐步掌握EVC和WinCE...
《Javapuzzler+JAVA解惑 中英双语 完整源代码》是一份集学习与实践于一体的Java编程资源,包含《Java Puzzlers》和《JAVA解惑》两部分,以及对应的完整源代码。这份资料对于深入理解Java语言的特性和陷阱,提升编程...
本项目"**C#打印合格证2.0打印机套打票据程序**"提供了一整套解决方案,包括完整的源代码和项目文件,使得开发者能够快速构建符合自身业务需求的票据打印系统。 首先,我们要理解**打印机套打**的概念。打印机套打...
Linux内核源代码是计算机科学领域的一份宝贵资源,它揭示了操作系统的核心运作机制,为开发者提供了深入理解操作系统原理的机会。这份"详细完整"的Linux内核源代码,特别是版本0.12,是一个早期的版本,但它包含了...
在“汽车电子软件开发 UDS 完整代码 Demo 飞思卡尔 freesacle s12g128.rar”这个压缩包中,包含了基于飞思卡尔(Freescale)s12g128微控制器的UDS服务的示例代码,这对于汽车电子开发者来说是一份宝贵的资源。...
这份压缩包包含了书中所有示例的完整C语言代码,对于初学者来说是一份极其宝贵的资源。以下是基于这个主题的详细知识点讲解: 1. 数据结构基础: - 数据结构是组织和存储数据的方式,它涉及到数据的逻辑结构(如...
TI C5000 DSP库函数的完整源代码是一份非常宝贵的资源,尤其对于那些希望深入理解TI C5000系列数字信号处理器(DSP)的开发者而言。这份源代码包含了一系列用于C5000 DSP的库函数,涵盖了广泛的算法和功能,能够帮助...
"PCshare-vip2005完整源代码"是一份珍贵的学习资源,它包含了多个关键组件,为理解和研究网络共享和系统管理工具提供了深入的洞察。下面,我们将逐一解析这些组件及其相关的知识点。 1. **PcTlnt**: 这个组件可能是...
总的来说,飞思卡尔智能车电磁组程序完整代码是一个综合性的工程实践项目,涵盖了嵌入式系统、传感器技术、控制理论等多个领域的知识。通过深入学习和实践,不仅可以提升参赛者的技能,也为未来从事相关工作打下坚实...