根据unicode documentation,没有 f。假设你想要亚秒,那应该是 S。如果您希望按字面意思传输,还需要将 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]]);
根据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]]);
根据 ctrahey 的回答,这并不能完全得到您想要的格式,最终例如
012-06-22T16:44:32.9310000GMT-07:00
即'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);
这会失败,因为您的输入字符串与提供的日期格式不匹配 - 它在 +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);
对我来说输出2008-08-18 13:32:22 +0000。