NSDateFormatter iOS,日期模式

foF*_*Fox 2 date formatter ios

我只是无法弄清楚如何设置NSDateFormatter日期格式,因此[formatter dateWithString:]不返回nil.

日期如下:

2008-08-18T14:32:22.1875000 + 01:00

我试过了

formatter setDateFormat:@"yyyy-MM-ddTHH:mm:ss.fffffffzz+GMT"];
Run Code Online (Sandbox Code Playgroud)

似乎没有工作:(.任何建议,请帮助.

好的,谢谢你的回答,似乎我误解了我的问题,所以我试着改写它,对不起,也许它对编程来说有点迟了.我需要一个日期包装器对象,所以我不必自己解析包含日期的字符串.基本上我从数据库中获取一个我需要解析的字符串,我可以在我的UI中使用它.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];    
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ";
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDate *date = [formatter dateFromString:@"2008-08-18T14:32:22.1875000+01:00"];
NSLog(@"%@", date);
Run Code Online (Sandbox Code Playgroud)

打印为零

我想要的是NSString-> NSDat,所以我可以问一下它包含的月份或它包含的时间.我现在看到NSDate没有这样的方法.这是一个愚蠢的假设.现在有什么想法吗?

Tom*_*mmy 8

根据unicode文档,没有f.假设你希望亚秒,这应该是小号.如果您希望它按字面意思传输,您还需要将T放在引号中.我觉得你也对z感到困惑,可能想要ZZZZ而不是zz + GMT.所以:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ";
NSLog(@"%@", [formatter stringFromDate:[NSDate date]]);
Run Code Online (Sandbox Code Playgroud)

根据QA1480,en_US_POSIX如果要生成用于存储的技术字符串,您可能还需要显式设置区域设置.如果您想显示字符串,它保留根据当前区域设置调整您请求的字段的权限.那就是:

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
formatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ";
NSLog(@"%@", [formatter stringFromDate:[NSDate date]]);
Run Code Online (Sandbox Code Playgroud)

根据ctrahey的回答,这并没有完全得到你想要的格式,最终得到了例如

012-06-22T16:44:32.9310000GMT-07:00
Run Code Online (Sandbox Code Playgroud)

即字母'GMT'已经在那里悄悄上升.切换到单个Z摆脱了对GMT的显式引用,但也删除了冒号.

编辑:根据您的示例代码:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];    
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ";
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDate *date = [formatter dateFromString:@"2008-08-18T14:32:22.1875000+01:00"];
NSLog(@"%@", date);
Run Code Online (Sandbox Code Playgroud)

这失败是因为您的输入字符串与提供的日期格式不匹配 - 它在+01:00之前缺少字母GMT.由于似乎没有与数据库中的字符串完全匹配的unicode日期字符串,因此最简单的方法就是删除冒号.例如

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];    
formatter.dateFormat = @"yyyy-MM-dd'T'HHmmss.SSSSSSSZ";
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSString *sourceString = @"2008-08-18T14:32:22.1875000+01:00";
NSDate *date = [formatter dateFromString:[sourceString stringByReplacingOccurrencesOfString:@":" withString:@""]];
NSLog(@"%@", date);
Run Code Online (Sandbox Code Playgroud)

对我而言,输出2008-08-18 13:32:22 +0000.