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/