将日期字符串转换为 NSObject 时出错
Error when converting date string to NSObject
我正在向服务器发送详细信息,这要求我将日期字符串转换为 NSDate 对象。将携带此对象的字典声明如下
NSMutableDictionary *detailsRequest = [NSMutableDictionary dictionary];
然后将日期字符串转换为对象的代码如下所示
[_dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[_dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
[_dateFormatter setAMSymbol:@"am"];
[_dateFormatter setPMSymbol:@"pm"];
[detailsRequest setObject:[_dateFormatter stringFromDate:[_dateFormatter dateFromString:val]] forKey:NDUserServerDateOfBirthKey];
密钥 NDUserServerDateOfBirthKey 声明为这样的常量
NSString * const NDUserServerDateOfBirthKey = @"dob";
val 的值始终为“09/08/1987”,当它到达最后一行时会抛出一个 SIGABRT 错误
2018-08-23 10:33:04.612769+0100 ClientCore[353:36543] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSDictionaryM setObject:forKey:]: object cannot be nil (key: dob)'
我试过将 _dateFormatter 减少到 [_dateFormatter setDateFormat:@"yyyy-MM-dd"];但它仍然因同样的错误而崩溃。我的字符串日期总是有一个值,所以我做错了什么?
日期格式错误,无法转换日期字符串,出现错误
请尝试理解格式。日期字符串包含以斜线分隔的日 (d)、月 (M) 和年 (y) – 或月 (M)、日 (d) 和年 (y) - 但没有字母 T
,没有连字符(-),没有小时 (H),没有分钟 (m),没有秒 (s),没有毫秒 (S),没有时区 (Z),也没有 am/pm
格式为@"dd/MM/yyyy"
或@"MM/dd/yyyy"
为什么要将字符串转换为日期然后立即返回字符串?
如果您想将 dd/MM/yyyy
转换为 ISO8601,您需要两种不同的输入和输出格式
NSString *val = @"09/08/1987";
NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
_dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
_dateFormatter.dateFormat = @"dd/MM/yyyy";
NSDate *date = [_dateFormatter dateFromString:val];
_dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZZZ";
NSString *convertedString = [_dateFormatter stringFromDate:date];
我正在向服务器发送详细信息,这要求我将日期字符串转换为 NSDate 对象。将携带此对象的字典声明如下
NSMutableDictionary *detailsRequest = [NSMutableDictionary dictionary];
然后将日期字符串转换为对象的代码如下所示
[_dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[_dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
[_dateFormatter setAMSymbol:@"am"];
[_dateFormatter setPMSymbol:@"pm"];
[detailsRequest setObject:[_dateFormatter stringFromDate:[_dateFormatter dateFromString:val]] forKey:NDUserServerDateOfBirthKey];
密钥 NDUserServerDateOfBirthKey 声明为这样的常量
NSString * const NDUserServerDateOfBirthKey = @"dob";
val 的值始终为“09/08/1987”,当它到达最后一行时会抛出一个 SIGABRT 错误
2018-08-23 10:33:04.612769+0100 ClientCore[353:36543] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSDictionaryM setObject:forKey:]: object cannot be nil (key: dob)'
我试过将 _dateFormatter 减少到 [_dateFormatter setDateFormat:@"yyyy-MM-dd"];但它仍然因同样的错误而崩溃。我的字符串日期总是有一个值,所以我做错了什么?
日期格式错误,无法转换日期字符串,出现错误
请尝试理解格式。日期字符串包含以斜线分隔的日 (d)、月 (M) 和年 (y) – 或月 (M)、日 (d) 和年 (y) - 但没有字母 T
,没有连字符(-),没有小时 (H),没有分钟 (m),没有秒 (s),没有毫秒 (S),没有时区 (Z),也没有 am/pm
格式为@"dd/MM/yyyy"
或@"MM/dd/yyyy"
为什么要将字符串转换为日期然后立即返回字符串?
如果您想将 dd/MM/yyyy
转换为 ISO8601,您需要两种不同的输入和输出格式
NSString *val = @"09/08/1987";
NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
_dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
_dateFormatter.dateFormat = @"dd/MM/yyyy";
NSDate *date = [_dateFormatter dateFromString:val];
_dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZZZ";
NSString *convertedString = [_dateFormatter stringFromDate:date];