[Java]DateFormat的pattern定義技巧


 


我們經常使用的pattern如下"yyyy/MM/dd HH:mm:ss SSS", 這些yyyyMMdd等都是從patternChars(代碼段1)中來的,其中每個字符表示的意思可參見PATTERN_*得定義(見代碼段1)。


pattern中出現的所有屬於a-z以及A-Z的字符,如果不在patternChars中,則會拋出異常IllegalArgumentException。(見代碼段2).


如果需要在格式中添加a-z以及A-Z的字符,則需要使用單引號(見代碼段3),如:yyyy/MM/dd'T'HH:mm:ss,SSS'Z'.


注意H表示24小時制,hh表示12小時制

代碼段1(文件:DateFormatSymbols.java):
/**
 * Unlocalized date-time pattern characters. For example: 'y', 'd', etc.
 * All locales use the same these unlocalized pattern characters.
 */
static final String  patternChars = "GyMdkHmsSEDFwWahKzZYuXL";

static final int PATTERN_ERA                  =  0; // G
static final int PATTERN_YEAR                 =  1; // y
static final int PATTERN_MONTH                =  2; // M
static final int PATTERN_DAY_OF_MONTH         =  3; // d
static final int PATTERN_HOUR_OF_DAY1         =  4; // k
static final int PATTERN_HOUR_OF_DAY0         =  5; // H
static final int PATTERN_MINUTE               =  6; // m
static final int PATTERN_SECOND               =  7; // s
static final int PATTERN_MILLISECOND          =  8; // S
static final int PATTERN_DAY_OF_WEEK          =  9; // E
static final int PATTERN_DAY_OF_YEAR          = 10; // D
static final int PATTERN_DAY_OF_WEEK_IN_MONTH = 11; // F
static final int PATTERN_WEEK_OF_YEAR         = 12; // w
static final int PATTERN_WEEK_OF_MONTH        = 13; // W
static final int PATTERN_AM_PM                = 14; // a
static final int PATTERN_HOUR1                = 15; // h
static final int PATTERN_HOUR0                = 16; // K
static final int PATTERN_ZONE_NAME            = 17; // z
static final int PATTERN_ZONE_VALUE           = 18; // Z
static final int PATTERN_WEEK_YEAR            = 19; // Y
static final int PATTERN_ISO_DAY_OF_WEEK      = 20; // u
static final int PATTERN_ISO_ZONE             = 21; // X
static final int PATTERN_MONTH_STANDALONE     = 22; // L

 


代碼段2(文件SimpleDateFormat.java):

if ((tag = DateFormatSymbols.patternChars.indexOf(c)) == -1) {
    throw new IllegalArgumentException("Illegal pattern character " +
                                       "'" + c + "'");
}
代碼段3(文件SimpleDateFormat.java,函數private char[] compile(String pattern))

for (int i = 0; i < length; i++) {
            char c = pattern.charAt(i);

            if (c == '\'') {
...


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章