前陣子在剛好在處理時間格式,研究了Twitter與Facebook等各大網站的時間格式,發現每家都不太一樣各有特色呀。
因此決定實作做一個iOS上使用的Formatter,可以顯示 Twitter time format 或 Facebook time format。
NSCalender與 NSDateComponents
在Cocoa上有兩個很方便的Class:NSCalender 與 NSDateComponents,可以直接把時間轉換成幾天、幾年、幾個月、幾分鐘等等。 利用這兩個 Class 我們就可以做出最基本的幾分鐘前,幾秒鐘前啦。
宣告如下:
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit |
NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
fromDate:date toDate:[NSDate date] options:0];
其中可以指定 NSCalendar 的單位為何:如果只要年份就只填 NSYearCalendarUnit,如果需要多種就可以串起來啦。
使用時就可以直接找出 時間差 有多少啦,還可以指定到年月日分秒唷!
if (components.year > 0)
{...}
else if (components.second > 0)
{...}
特定的日期
如果要指定特定的日期,可以利用 NSDateComponents 來完成。但要一定要跟 NSCalender 做搭配,因為官方文件寫著
Important: An NSDateComponents object is meaningless in itself; you need to know what calendar it is interpreted against, and you need to know whether the values are absolute values of the units, or quantities of the units.
所以使用起來就會像下面程式碼一樣
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [[NSDateComponents alloc] init];
[components setYear:2013];
[components setMonth:12];
[components setDay:21];
NSDate* date = [calendar dateFromComponents:components];
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"EEE MM/dd";
return [dateFormatter stringFromDate:date];
// return string "Sat 12/21"
NSFormatter
另外一個常用到的 NSDateFormatter 則可以用來指定要顯示的 “時間格式”。
新增一個 NSDateFormatter
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"d MMM"];
其中 setDateFormat 可以參考:
Unicode Date Format Patterns
舉個例子:
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,任何時間格式就都不是問題啦!!!