NSDate - 还有更好的东西吗?

时间:2011-08-04 17:03:08

标签: iphone objective-c

NSDate/NSDateFormatter等似乎为常见任务占用了太多代码。

对于像JavaScript DateJS这样的iOS开发,还有更好的东西吗?

以下是常见NSDate用法的一些示例,其中规范解决方案可能至少两倍

  1. 从整数创建NSDate。解决方案:SO Answer 1
  2. 从NSDate获取年/月/日。解决方案:SO Answer 2
  3. SO上有更多这些常见场景。

3 个答案:

答案 0 :(得分:7)

我认为原生处理日期的方法不是更好。然而,你可以做的是在NSDate上创建一些类别,以便更容易处理日期,如果你发现自己经常重复相同的代码行,这将特别有用。

编辑:以下是一些示例:

答案 1 :(得分:1)

NSDate效率很高,效率很高,特别是与NSDateFormatter和NSCalendar结合使用时,虽然你可以说后面的类很臃肿而且“慢”,但它们非常深。

你有什么具体的抱怨?

答案 2 :(得分: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

使用类别:

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

我相信也可以使用指针间接来实现类似的结果,但不需要结构 - 它取决于任何人认为是“最干净”的解决方案。