2011-08-04 76 views
1

NSDate/NSDateFormatter等人似乎對於常見任務需要太多的代碼行。NSDate - 有什麼更好的?

對於iOS的開發,有沒有更好的東西,比如DateJS for JavaScript?

這裏有公共的NSDate用法,其中典型的解決方案可能是如至少兩次小的一些例子:

  1. 從整數創建的NSDate。解決方案:SO Answer 1
  2. 從NSDate獲取年/月/日。解決方案:SO Answer 2
  3. SO上有更多這些常見的情況。
+0

你能給我們更多具體的投訴嗎?否則,除了陳詞濫調之外,很難提供任何東西。 – Tommy

+0

那是多少代碼?你想做什麼 ? – Legolas

+0

增加了兩個典型解決方案的例子。 「太多的代碼行」已被澄清,意味着它可以容易地是一半或更少的字符。 – Lee

回答

7

我不認爲有更好的方式本地處理日期。但是你可以做的是在NSDate上創建幾個類別,以便更容易地處理日期,如果你發現自己經常重複相同的代碼行,這是特別有用的。

編輯:這裏有幾個例子:

+0

我同意,類別可能是做這些事情的最佳方式。不幸的是,Objective-C並不太熟悉DRY(不要重複自己)範式...... – Fabian

+0

這些很有用,我給你+1。不過,我不會將其標記爲解決方案,因爲「常見」NSDate方案未涵蓋(請參閱示例2)。我認爲這種情況很普遍,因爲它有超過10個選票。 – Lee

+0

我相信,即使是在這些目的下,大部分時間都是足夠的。我會發布一些代碼來展示如何處理第二個示例。 –

1

NSDate的是高效,高生產力,特別是在與NSDateFormatter和NSCalendar結合起來,雖然你可以認爲後者班級非常臃腫,「慢」,他們非常深。

你有什麼具體的投訴?

+0

首先,您有權要求提供具體的投訴,我已經添加了一個鏈接來嘗試和說明。
其次,我沒有看到相對於其他語言的日期類,NSDate如何被認爲是高效的。您是否將生產力與Java/C#/ Javascript進行了比較?不是在談論原始性能,而是在說你的生產力。 – Lee

+0

與JavaScript相比,NSDate更好。沒有Java或C#的經驗,所以不能評論。但是NSDate(以及相關的API)非常有用和高效。可能有點神祕但理解力強。 –

+0

我指的是使用DateJS的JavaScript日期處理,它實際上使日期變得愉快。是的,它是一個插件/幫手,但這就是我的觀點,爲什麼不在ObjC中有這樣的幫手,這樣每個人都不必創建自己的類別?猜想那裏的解決方案需要更多的動力/採用才能成爲事實上的使用。 – Lee

1

至於使用類別提取的NSDate的年/月/日,一個例子:

的NSDate + ComponentsExtractor.h:

#import <Foundation/Foundation.h> 

typedef struct 
{ 
    NSInteger year; 
    NSInteger month; 
    NSInteger day; 
} dateComponents; 

@interface NSDate (ComponentsExtractor) 
+ (dateComponents)componentsFromDate:(NSDate *)theDate; 
@end 

的NSDate + ComponentsExtractor.m:

#import "NSDate+ComponentsExtractor.h" 

@implementation NSDate (ComponentsExtractor) 

+ (dateComponents)componentsFromDate:(NSDate *)theDate 
{ 
    NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 
    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; 
    NSDateComponents *components = [gregorian components:unitFlags fromDate:theDate]; 

    dateComponents theComponents; 
    theComponents.year = [components year]; 
    theComponents.month = [components month]; 
    theComponents.day = [components day]; 

    return theComponents; 
} 

@end 

利用的CA tegory:

NSDate *theDate = [NSDate date]; // use the current date ... 
dateComponents components = [NSDate componentsFromDate:theDate]; 
NSLog(@"%i - %i - %i", components.year, components.month, components.day); 

我相信間接指針可以作爲很好地實現類似的結果,但不需要一個結構 - 這取決於任何一個作爲「乾淨」的解決方案方面。