how to call in main I'm getting error

93 Views Asked by At

I want to convert NSString to NSdate and back using category. I'm having trouble in calling.

+ (NSDate*)stringDateFromString:(NSString*)string
{
  NSString *dateString = @"01-02-2010";
  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

  [dateFormatter setDateFormat:@"dd-MM-yyyy"];
  NSDate *dateFromString = [[NSDate alloc] init];
  // voila!
  dateFromString = [dateFormatter dateFromString:dateString];
  return dateFromString;
}

+ (NSString*)StringFromDate :(NSDate*)date
{
  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  [dateFormatter setDateFormat:@"dd-MM-yyyy"];
  NSString *stringDate = [dateFormatter stringFromDate:[NSDate date]];
  NSLog(@"%@", stringDate);
  return stringDate;
}
1

There are 1 best solutions below

3
On

Based on the code you have provided you will need to create a category as follows:-

NSString+Utils.h

@interface NSString (Utils)
+ (NSDate*)dateFromString:(NSString*)string;
+ (NSString*)stringFromDate:(NSDate*)date;
@end

NSString+Utils.m

@implementation NSString (Utils)

+ (NSDate*)dateFromString:(NSString*)string
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    NSDate *dateFromString = [[NSDate alloc] init];
    // voila!
    dateFromString = [dateFormatter dateFromString:string];
    return dateFromString;
}

+ (NSString*)stringFromDate:(NSDate*)date
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    NSString *stringDate = [dateFormatter stringFromDate:date];
    NSLog(@"%@", stringDate);
    return stringDate;
}

@end

And to call either method:-

NSDate *date = [NSString dateFromString:@"22-06-2015"];
NSString *string = [NSString stringFromDate:date];

NSLog(@"----------------");
NSLog(@"Date: %@", date);
NSLog(@"String: %@", string);
NSLog(@"----------------");

Please be aware that allocating NSDateFormatter is expensive so you might not want to be doing too many calls to these methods (in a table view for example).

Output from XCTestCase

Test Case '-[stackTests testExample]' started.
2015-06-23 07:12:59.601 xctest[3103:49715] 22-06-2015
2015-06-23 07:12:59.601 xctest[3103:49715] ----------------
2015-06-23 07:12:59.602 xctest[3103:49715] Date: 2015-06-21 23:00:00 +0000
2015-06-23 07:12:59.602 xctest[3103:49715] String: 22-06-2015
2015-06-23 07:12:59.602 xctest[3103:49715] ----------------
Test Case '-[stackTests testExample]' passed (0.002 seconds).