ios - NSDateFormatter iOS,日期模式

标签 ios date formatter

我只是想不出如何设置 NSDateFormatter 日期格式,所以 [formatter dateWithString:] 不会返回 nil。

日期如下所示:

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

我试过了

formatter setDateFormat:@"yyyy-MM-ddTHH:mm:ss.fffffffzz+GMT"];

似乎不起作用 :(。任何建议,请帮助。

好的,感谢您的回答,我的问题似乎有点误导了人们,所以我尝试重新措辞,很抱歉,也许编程有点晚了。我需要一个日期包装器对象,这样我就不必自己解析包含日期的字符串。基本上,我从需要解析的数据库中获取一个字符串,以便在我的 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);

打印 nil

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

最佳答案

根据 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

关于ios - NSDateFormatter iOS,日期模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165284/

相关文章:

ios - 标签的持续时间

java - 如何使 Eclipse 格式化程序将 while 语句保留在同一行?

java - 智能 Java 格式化程序

c - 在 Eclipse 中对整个 C 项目运行自动格式化程序

ios - 为什么我的应用程序会因内存问题而崩溃?

ios - 死锁 `dispatch_barrier`

java - 从字符串转换为日期时间

ios - - [UIImage resizableImageWithCapInsets :] strange behavior

iphone - TWTeetComposeViewController发布新推文后执行自定义代码

php - 使用mysql和php存储日期