我正在使用代码更改日期格式:
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];
但是我得到了错误:
*** -[__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
)
我搜索了它但得到了类似的东西。有人告诉我问题或我错了。 任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:1)
我觉得你有一个错字:) 试试
[dateFormat setDateFormat:@“ddMMyyyy HH:mm:ss”];
答案 1 :(得分:1)
你的代码应该是
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];
参考Apple的文档NSDateFormatter Class Reference
答案 2 :(得分:0)
您的Currentdate
变量将为nil
。
您的dateFormat错误[dateFormat setDateFormat:@" dMMyyyy HH:mm:ss"];
答案 3 :(得分:0)
使用以下代码可能会对您有帮助。
NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"HH:mm dd MMM yyyy" options:0
locale:[NSLocale currentLocale]];
date = [fmt dateFromString:[NSString stringWithFormat:@"%@ %@", obj.meetingTime, obj.meetingDate]];
有关详细说明,请参阅以下链接。
答案 4 :(得分:0)
首先,我认为你的意思是ddMMyyyy HH:mm:ss
[dateFormat setDateFormat:@“dMMyyyy HH:mm:ss”];
其次,它取决于您Currentdate
的设置。它必须与您的NSDateForatter匹配,否则将无法正常工作。例如
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);
将记录以下
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
为什么第一个日期为null,第二个日期有效?这是因为格式在第二个日期是正确的,但在第一个日期中格式不正确(对于此NSDateFormatter)。
也是这一行
NSDate *today = [dateFormat dateFromString:[dateFormat stringFromDate:[NSDate date]]];
与此行相同
NSDate *today = [NSDate date];
您只是从NSDate转换为字符串转换为NSDate。
要从@"Thur, 2 Jan 2014 19:40:18 GMT"
格式转换日期,我将从字符串中删除GTM
和Thur,
并使用格式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);