rus*_*ord 3 cocoa objective-c nsdateformatter
我有几个NSDate包含符合此格式的值的对象yyy-MM-dd'T'HH:mm:ss.SSS
当我尝试转换为不同的格式,如MMM dd, yyyy HH:mm格式化程序总是返回nil.
但是,如果我对通过NSDate对象的字符串值进行硬编码,则会将其转换为新格式而不会出现问题.
我NSDate使用该setValue:forKey:方法在模型中填充我的对象,我觉得这里的问题是JSON库传递字符串值.但是,调试显示NSDatehas包含通过JSON返回的值.
知道是什么导致了这种奇怪的行为吗?
这是我的转换代码:
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS"];
NSString *createdDateStr = [format stringFromDate:modelObj.createdDate];
[format setDateFormat:@"MMM dd, yyyy HH:mm"];
NSDate *formattedDate = [format dateFromString:createdDateStr];
NSLog(@"========= REal Date %@",[format stringFromDate:formattedDate]);
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 10
编辑:重读你的问题,我认为你除了其他任何事情之外还有一个概念上的误解:
我有几个NSDate对象,其中包含符合以下格式的值
据我所知(我不是Objective-C程序员,不可否认)一个NSDate对象对格式化一无所知.它只是代表了一个瞬间.它不知道它是从文本解析还是以其他方式创建.
它就像一个int- int变量不是十进制或十六进制,它只是一个数字.这是你格式化和解析时指定的.同样,您可以在解析和格式化时NSDateFormatter描述所需的格式.
您目前只有一个 NSDateFormatter - 您正在设置格式,"yyyy-MM-dd'T'HH:mm:ss.SSS"然后在调用之前重置它dateFromString.您给出的代码片段格式modelObj.createdDate为ISO-8601格式,但后来尝试使用"MMM dd,yyyy HH:mm"格式解析它.
我建议你有两个独立的NSDateFormatter对象:
NSDateFormatter *isoFormat = [[NSDateFormatter alloc] init];
[isoFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS"];
NSString *createdDateStr = [format stringFromDate:modelObj.createdDate];
NSDateFormatter *shortFormat = [[NSDateFormatter alloc] init];
[shortFormat setDateFormat:@"MMM dd, yyyy HH:mm"];
NSDate *parsedDate = [isoFormat dateFromString:createdDateStr];
NSLog(@"========= REal Date %@",[shortFormat stringFromDate:parsedDate]);
Run Code Online (Sandbox Code Playgroud)
请注意,我已将formattedDate变量更改为parsedDate,因为它实际上是 - NSDate通过解析文本创建的.
正如评论中所述,除非你真的需要像这样进行格式化和解析,否则你不应该这样做.我包括所有的原代码只是为了告诉你如何可以格式化日期,然后用相同的重新分析它NSDateFormatter.你只会得到相同的结果:
NSDateFormatter *shortFormat = [[NSDateFormatter alloc] init];
[shortFormat setDateFormat:@"MMM dd, yyyy HH:mm"];
NSLog(@"========= REal Date %@",[shortFormat stringFromDate:modelObj.createdDate]);
Run Code Online (Sandbox Code Playgroud)
通常,您应该避免不必要的转换.从文本转换为更自然的数据类型(NSDate在这种情况下,但同样适用于数字等)并尽可能多地使用该数据类型,仅在最后时刻转换为文本.
| 归档时间: |
|
| 查看次数: |
9194 次 |
| 最近记录: |