将 NSString 转换为具有日期格式的 NSString 块

Posted

技术标签:

【中文标题】将 NSString 转换为具有日期格式的 NSString 块【英文标题】:Convert NSString to Chunks of NSString that has a date format 【发布时间】:2010-02-16 15:44:42 【问题描述】:

这可能很简单。我找了,还没找到。

如何将 NSString @"20100216190205" 转换为格式为 @"yyyy-MM-dd HH:mm:ss" 的 NSString。

即:@"2010-02-16 19:02:05"

编辑: 在其他情况下,我想避免使用 NSDateFormatter 更通用。

【问题讨论】:

你为什么不想使用 NSDateFormatter?它们实施起来并不难,而且是专门为此目的而设计的。见:developer.apple.com/mac/library/documentation/Cocoa/Conceptual/… 为什么说“不使用 NSDateFormatter”?只是因为你的例子不起作用?你是如何创建格式化程序的? 有编辑。我希望它更清楚。 【参考方案1】:

您可以提取每个子字符串,将它们转换为整数 (-intValue),然后使用 NSDateComponents 将它们转换为日期。而且比使用 NSDateFormatter 麻烦多了。

在您的情况下,NSDateFormatter 的格式需要在调用-dateFromString: 之前设置为yyyyMMddHHmmss,即

[formatter setDateFormat:@"yyyyMMddHHmmss"];
NSDate *date = [formatter dateFromString:@"20100216190205"];
....

【讨论】:

谢谢。我得到了它。我应该使用:[格式化程序 setDateFormat:@"yyyyMMddHHmmss"];【参考方案2】:

纯粹作为编写代码的练习:

NSString* digits = @"20100216190205"; // this is probably a parameter somewhere
NSMutableString* formatted = [digits mutableCopy];
[formatted insertString:@":" atIndex:12];
[formatted insertString:@":" atIndex:10];
[formatted insertString:@" " atIndex:8];
[formatted insertString:@"-" atIndex:6];
[formatted insertString:@"-" atIndex:4];
NSLog(@"original string: %@ -> formatted: %@", digits, formatted);

但我同意:对自己放轻松,为此使用日期格式化程序。

【讨论】:

【参考方案3】:

您需要将formatter 的格式设置为 yyyyMMddHHmmss 以解析示例中的字符串。您需要创建一个新的格式化程序或修改原始格式化程序的格式以合并您想要的更具视觉吸引力的格式 (@"yyyy-MM-dd HH:mm:ss")。

【讨论】:

以上是关于将 NSString 转换为具有日期格式的 NSString 块的主要内容,如果未能解决你的问题,请参考以下文章

iOS日期转换之UTC/GMT时间格式

将 NSDate 转换为 NSString

使用字符串格式“Sun, 08 Jan 2012 13:57:38 +0000”将 NSString 转换为 NSDate

将 DatePicker 日期转换为 UTC 格式返回 NULL

将具有日期格式的列中的所有行转换为文本格式

如何将日期字符串转换为具有不同日期格式的时间戳?