/* * JEF - Copyright 2009-2010 Jiyi (mr.jiyi@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jef.tools; import java.text.DateFormat; import java.text.SimpleDateFormat; /** * 用于提供各种线程安全的时间日期格式 <li>G 年代标志符</li> <li>y 年</li> <li>M 月</li> <li>d 日</li> <li> * h 时 在上午或下午 (1~12)</li> <li>H 时 在一天中 (0~23)</li> <li>m 分</li> <li>s 秒</li> <li> * S 毫秒</li> <li>E 星期</li> <li>D 一年中的第几天</li> <li>F 一月中第几个星期几</li> <li>w * 一年中第几个星期</li> <li>W 一月中第几个星期</li> <li>a 上午 / 下午 标记符</li> <li>k 时 在一天中 (1~24)</li> * <li>K 时 在上午或下午 (0~11)</li> <li>z 时区</li> * * @author Jiyi * */ public abstract class DateFormats { // 支持 yyyy-m-d 格式的 // 非严格模式正则 public static final String DATE_CS_REGEXP = "((^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(10|12|0?[13578])([-\\/\\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(11|0?[469])([-\\/\\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\\d{2})|([2-9]\\d{3}))([-\\/\\._])(0?2)([-\\/\\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([3579][26]00)([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][0][48])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][0][48])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][2468][048])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][2468][048])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([1][89][13579][26])([-\\/\\._])(0?2)([-\\/\\._])(29)$)|(^([2-9][0-9][13579][26])([-\\/\\._])(0?2)([-\\/\\._])(29)$))"; // 严格模式正则 public static final String DATE_CS_REGEXP_STRICT = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)"; /** 日期格式:美式日期 MM/DD/YYYY */ public static final ThreadLocal<DateFormat> DATE_US = new TLDateFormat("MM/dd/yyyy") ; /** 日期格式:美式日期+时间 MM/DD/YYYY HH:MI:SS */ public static final ThreadLocal<DateFormat> DATE_TIME_US = new TLDateFormat("MM/dd/yyyy HH:mm:ss"); /** 日期格式:中式日期 YYYY-MM-DD */ public static final ThreadLocal<DateFormat> DATE_CS = new TLDateFormat("yyyy-MM-dd"); /** 日期格式:日期+时间 YYYY/MM/DD */ public static final ThreadLocal<DateFormat> DATE_CS2 = new TLDateFormat("yyyy/MM/dd"); /** 日期格式:日期+时间 YYYY-MM-DD HH:MI:SS */ public static final ThreadLocal<DateFormat> DATE_TIME_CS = new TLDateFormat("yyyy-MM-dd HH:mm:ss"); /** 日期格式:日期+时间 YYYY/MM/DD HH:MI:SS */ public static final ThreadLocal<DateFormat> DATE_TIME_CS2 = new TLDateFormat("yyyy/MM/dd HH:mm:ss"); /** 日期格式:中式日期时间(到分) YYYY-MM-DD HH:MI */ public static final ThreadLocal<DateFormat> DATE_TIME_ROUGH = new TLDateFormat("yyyy-MM-dd HH:mm"); /** 日期格式:中式日期+时间戳 YYYY-MM-DD HH:MI:SS.SSS */ public static final ThreadLocal<DateFormat> TIME_STAMP_CS = new TLDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); /** 日期格式:仅时间 HH.MI.SS */ public static final ThreadLocal<DateFormat> TIME_ONLY = new TLDateFormat("HH:mm:ss"); /** 日期格式:日期紧凑 YYYYMMDD */ public static final ThreadLocal<DateFormat> DATE_SHORT = new TLDateFormat("yyyyMMdd"); /** 日期格式:日期时间紧凑 YYYYMMDDHHMISS */ public static final ThreadLocal<DateFormat> DATE_TIME_SHORT_14 = new TLDateFormat("yyyyMMddHHmmss"); /** 日期格式:日期时间紧凑 YYYYMMDDHHMI */ public static final ThreadLocal<DateFormat> DATE_TIME_SHORT_12 = new TLDateFormat("yyyyMMddHHmm"); /** 日期格式:yyyyMM */ public static final ThreadLocal<DateFormat> YAER_MONTH = new TLDateFormat("yyyyMM"); private static final class TLDateFormat extends java.lang.ThreadLocal<DateFormat>{ private String pattern; public TLDateFormat(String p){ this.pattern=p; } @Override protected DateFormat initialValue() { return new SimpleDateFormat(pattern); } } /** * 得到ThreadLocal对象的DateFormat * @param pattern * @return */ public static final ThreadLocal<DateFormat> getThreadLocalDateFormat(String pattern){ return new TLDateFormat(pattern); } }