Wednesday, December 09, 2015

關於 NSDateFormatter 的二三事

關於 NSDateFormatter 的二三事

想要得知有關日期的參數就必須使用 NSDate,由於從 NSDate 得到的資料實在是太多太雜,因此就避免不了使用 NSDateFormatter 來格式化(正規化)這些資訊,接下來我們就來探討,到底有哪些格式化的參數是我們可以用的。

首先,先介紹一下如何從 NSDate 中取得日期的相關料,並進行所謂的格式化,第一步當然是宣告一個 NSDate 型態的變數,並取得當下的日期資料。

1
NSDate *date = [NSDate date];

接下來就是宣告一個 NSDateFormatter 型態的變數,並做格式化的設定。

1
2
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"輸入正規化參數 ex:YYYY-MM-d"];

最後,就是將我們所得到的日期資料進行格式化。

1
NSString *correctDate = [formatter stringFromDate:date];

完成上述步驟之後,字串 correctDate 就存放的格式化好的日期資料,下面我們將列出所有可能的格式化參數以供參考。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
與時間相關
參數      代表意義
a        AM/PM (上午/下午)
K        0~11 0時的12小時制
h        1~12 12小時制
H        0~23 0時的24小时制
k        1~24 24小時制
m        0~59 分鐘
s        0~59 秒數
s        秒數的個位數
A        0~86399999 一天當中的第幾微秒
v~vvv    一般的GMT時區縮寫
vvvv     一般的GMT時區名稱
z~zzz    具體的GMT時區縮寫
zzzz     具體的GMT時區名稱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
與日期相關
參數      代表意義
d        1~31 日期
D        1~366 一年的第幾天
e        1~7 一週的第幾天
c/cc     1~7 一週的第幾天,星期日為第一天
ccc      星期幾縮寫
E~EEE    星期幾縮寫
cccc     星期幾全名
EEEE     星期幾全名
F        1~5 每月第幾周,一周的第一天為周一
w        1~5 每月第幾周,一周的第一天為周日
w        1~53 一年的第幾周,從去年的最後一個周日算起,一周的第一天為周日
L/LL     1~12 第幾個月
M/MM     1~12 第幾個月
LLL      月份縮寫
MMM      月份縮寫
LLLL     月份全名
MMMM     月份全名
q/qq     1~4 第幾季
Q/QQ     1~4 第幾季
qqq      季度縮寫
QQQ      季度縮寫
qqqq     季度全名
QQQQ     季度全名
u        完整年份
y/yyyy   完整年份
Y/YYYY   完整年份,從星期天開始的第一周算起
yy/yyy   兩位數的年份
YY/YYY   兩位數的年份,從星期天開始的第一周算起

1
2
3
4
5
6
特殊用途
參數      代表意義
g        Julian Day Number,從4713 BC一月一日算起
G~GGG    BC/AD 西元前後縮寫
GGGG     西元前後全名

這裡只有列出幾個常用常用參數,還有一些小技巧並沒有詳述,例如今天是 15 號,輸入參數 d 或是 dd 皆可以得到數值 15,可是輸入 ddd 卻會得到數值 015,而輸入 dddd 又會得到 0015,其他的參數也可以此類推,有興趣的讀者們可以自行實驗。

No comments: