ios - 确保 AM/PM(期间)不会出现在 NSDateFormat stringFromDate 中

标签 ios objective-c

Unicode 日期格式模式指南 ( here ) 声明向格式附加“a”将获得句点(例如 AM 或 PM),例如,

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss a"];

但是我希望确保不显示期间信息,但我找不到用于执行此操作的格式字符串。我使用的格式字符串如下:

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];

不幸的是,当我使用 stringFromDate 时,我得到以下信息:

2013-01-09T11:11:00 上午

我不想简单地从结果字符串中去除 AM 或 PM,因为句点语法在不同的日历等中可能不同,我只想停止出现句点信息。

----8<------

考虑以下代码

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
NSString *stringDate = [formatter stringFromDate:[NSDate date]];

self.labelOutput.text = stringDate;

[formatter release];

这段代码将生成一个我想要的格式的字符串——但是出于内存管理的原因我不能使用它。我正在处理的应用程序受到 NSDateFormatter 内存泄漏的困扰。因此,我们使用单例类为应用程序提供一组 NSDateFormatters,这些 NSDateFormatters 永远不会被释放,因此我们最大限度地减少了内存泄漏量。不幸的是,即使我这样应用日期格式字符串,这些静态 NSDateFormatters 也会附加 AM/PM:

NSDateFormatter *formatter = [MyDateFormatter dateFormat:kFormatDateMediumStyleTimeShortStyle];

[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];

最佳答案

根据 date formatter different output on different devices running same iOS version ,将 NSDateFormatter 的本地设置为 en_US_POSIX 将解决此问题。

除了设置本地,您可能希望避免时区设置问题,例如:
[格式化程序 setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

关于ios - 确保 AM/PM(期间)不会出现在 NSDateFormat stringFromDate 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14233997/

相关文章:

ios - 使用 [self presentModalViewController : animated:] and black screen

ios - 在 ios 中的 SQLite 中检索和存储图像

iphone - 通过单击 UIWebView 内的文本来调用 Objective-C 方法

ios - 如何知道所有并发的 NSOperations 都完成了

objective-c - UITableView - 当滚动太快时,最后一个单元格的内容会替换第一个单元格

ios - 我们可以为一个 View Controller 使用两个不同的 Xib 吗?

ios - 向声明为 NSMutableArray 的 IBOutletCollection 添加更多对象会导致异常

ios - 如何使用 OCMockito stub 类方法?

ios - 为什么我的标签栏上缺少背景?

objective-c - 运行我的项目时出现奇怪的错误