Pregunta

I am using the code for changing the date format :

NSDateFormatter *dateFormat=[NSDateFormatter new];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];


    dateFormat.locale=locale;

   [dateFormat setDateFormat:@" dMMyyyy HH:mm:ss"];
   NSDate *date = [dateFormat dateFromString:Currentdate];
  NSDate *today = [dateFormat dateFromString:[datef stringFromDate:[NSDate date]]];
    NSLog(@"date %@ %@",date,Currentdate);

    NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];
    NSUInteger unitFlags =   NSHourCalendarUnit|NSMinuteCalendarUnit
     ;
    NSDateComponents *components = [gregorian components:unitFlags
                                                fromDate:date
                                                  toDate:today options:0];

But I got the error :

  *** -[__NSCFCalendar components:fromDate:]: date cannot be nil
 I mean really, what do you think that operation is supposed to mean with a nil date?
 An exception has been avoided for now.
 A few of these errors are going to be reported with this complaint, then further.    violations will simply silently do whatever random thing results from the nil.
Here is the backtrace where this occurred this time (some frames may be missing due to       compiler optimizations):
    (
0   CoreFoundation                      0x30ffbad5 <redacted> + 92
1   CoreFoundation                      0x30ffba63 <redacted> + 74
2   VoxSci                              0x000d6997 -[MessagesViewController DayCounting] + 602
3   VoxSci                              0x000d858d -[MessagesViewController tableView:cellForRowAtIndexPath:] + 4000
4   UIKit                               0x33930315 <redacted> + 408
5   UIKit                               0x338d86cd <redacted> + 1800
6   UIKit                               0x338d7ef1 <redacted> + 184
7   UIKit                               0x337fe353 <redacted> + 346
8   QuartzCore                          0x33484943 <redacted> + 142
9   QuartzCore                          0x33480167 <redacted> + 350
10  QuartzCore                          0x3347fff9 <redacted> + 16
11  QuartzCore                          0x3347fa0d <redacted> + 228
12  QuartzCore                          0x3347f81f <redacted> + 314
13  QuartzCore                          0x3347954d <redacted> + 56
14  CoreFoundation                      0x31044f69 <redacted> + 20
15  CoreFoundation                      0x310428f7 <redacted> + 286
16  CoreFoundation                      0x31042c43 <redacted> + 738
17  CoreFoundation                      0x30fad471 CFRunLoopRunSpecific + 524
18  CoreFoundation                      0x30fad253 CFRunLoopRunInMode + 106
19  GraphicsServices                    0x35ce72eb GSEventRunModal + 138
20  UIKit                               0x33862845 UIApplicationMain + 1136

22  libdyld.dylib                       0x3b8cfab7 <redacted> + 2

)

I have searched about it but got similar things.Can someone tell me the problem or where I am wrong. Any help will be appreciated. Thanks in advance.

¿Fue útil?

Solución 3

First, I assume you meant ddMMyyyy HH:mm:ss [dateFormat setDateFormat:@" dMMyyyy HH:mm:ss"];

Second, it will depend on what your Currentdate is set to. It must match your NSDateForatter or it will not work. For example

NSString *Currentdate = @"2014-01-01 01:00:00";
NSString *Currentdate2 = @"01012014 01:00:00";

NSDateFormatter *dateFormat=[NSDateFormatter new];
[dateFormat setDateFormat:@"ddMMyyyy HH:mm:ss"];
NSDate *date = [dateFormat dateFromString:Currentdate];
NSLog(@"Currentdate %@",date);

Will log the follow

2014-01-22 23:14:27.958 TableViewCellWithAutoLayout[94829:a0b] Currentdate (null)
2014-01-22 23:14:27.959 TableViewCellWithAutoLayout[94829:a0b] Currentdate2 = 2014-01-01 07:00:00 +0000

Why is the first date null and the second date valid? It's because the format was correct in the second date, but not the right format (for this NSDateFormatter) in the first.

Also this line

NSDate *today = [dateFormat dateFromString:[dateFormat stringFromDate:[NSDate date]]];

Is the same as this line

NSDate *today = [NSDate date];

You are just converting from a NSDate to string to NSDate.

To convert the date from the format @"Thur, 2 Jan 2014 19:40:18 GMT" I'm going to strip the GTM and the Thur, from the string and use the format d MMM yyyy HH:mm:ss

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[dateFormatter setDateFormat:@"d MMM yyyy HH:mm:ss"];
NSString *dateString = @"Thur, 2 Jan 2014 19:40:18 GMT";
dateString = [dateString stringByReplacingOccurrencesOfString:@"GMT" withString:@""];

NSRange range = [dateString rangeOfString:@", " options:NSBackwardsSearch range:NSMakeRange(0, [dateString length]-1)];
NSLog(@"range.location: %lu", range.location);
dateString = [dateString substringFromIndex:range.location+1];

NSDate *date = [dateFormatter dateFromString:dateString];
NSLog(@"date = %@",date);

Otros consejos

I think you have a typo :) try

[dateFormat setDateFormat:@"ddMMyyyy HH:mm:ss"];

your code should be

NSString *Currentdate = @"2013-08-06 03:51:54";

NSDateFormatter *dformat = [[NSDateFormatter alloc]init];

[dformat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate *date = [dformat dateFromString:datestr];

Refer Apple's Docs NSDateFormatter Class Reference

Use below code may be this will help you.

 NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"HH:mm dd MMM yyyy" options:0
                                                              locale:[NSLocale currentLocale]];
date = [fmt dateFromString:[NSString stringWithFormat:@"%@ %@", obj.meetingTime, obj.meetingDate]];

See below link for more description.

What kind of sarcastic error is this iOS?

Your Currentdate variable will be nil.

Your dateFormat is wrong [dateFormat setDateFormat:@" dMMyyyy HH:mm:ss"];

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top