2011-08-04 50 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); 

我相信间接指针可以作为很好地实现类似的结果,但不需要一个结构 - 这取决于任何一个作为“干净”的解决方案方面。