前陣子在剛好在處理時間格式,研究了Twitter與Facebook等各大網站的時間格式,發現每家都不太一樣各有特色呀。
因此決定實作做一個iOS上使用的Formatter,可以顯示 Twitter time format 或 Facebook time format。
NSCalender與 NSDateComponents
在Cocoa上有兩個很方便的Class:NSCalender 與 NSDateComponents,可以直接把時間轉換成幾天、幾年、幾個月、幾分鐘等等。 利用這兩個 Class 我們就可以做出最基本的幾分鐘前,幾秒鐘前啦。
宣告如下:
1
2
3
4
| NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit |
NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
fromDate:date toDate:[NSDate date] options:0];
|
其中可以指定 NSCalendar 的單位為何:如果只要年份就只填 NSYearCalendarUnit,如果需要多種就可以串起來啦。
使用時就可以直接找出 時間差 有多少啦,還可以指定到年月日分秒唷!
1
2
3
4
| if (components.year > 0)
{...}
else if (components.second > 0)
{...}
|
NSFormatter
另外一個常用到的 NSDateFormatter 則可以用來指定要顯示的 “時間格式”。
新增一個 NSDateFormatter
1
2
| NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"d MMM"];
|
其中 setDateFormat 可以參考:
Unicode Date Format Patterns
舉個例子:
1
2
3
4
5
6
7
8
9
10
| NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
//7 Mar
[formatter setDateFormat:@"d MMM"];
//07 March
[formatter setDateFormat:@"dd MMMM"];
//March 7 at 12:30 PM
[formatter setDateFormat:@"MMMM d 'at' h:mm a"];
|
小結
我想有了這3個Class,任何時間格式就都不是問題啦!!!
View source on Github