【问题标题】:Converting a date format in objective C在目标 C 中转换日期格式
【发布时间】:2011-07-17 13:38:28
【问题描述】:

如何转换以下日期“Sun Jul 17 07:48:34 +0000 2011” 转换成以下格式“2011-07-17 07:48:34”?

我使用了NSDateFormatter,如下所示,但它不起作用。结果是 null。

NSDateFormatter *objDateFormatter = [[NSDateFormatter alloc] init];
[objDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[objDateFormatter dateFromString:sDate];

【问题讨论】:

标签: iphone objective-c ios nsdate nsdateformatter


【解决方案1】:

您的日期格式与您传入的日期样式不符。这是解释不同修饰符的文档:Date Format Patterns

要解析日期“Sun Jul 17 07:48:34 +0000 2011”,您需要这样的格式:

[dateFormat setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];

要将其转换为以下格式:“2011-07-17 07:48:34”,这是完整代码:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
NSDate *date  = [dateFormatter dateFromString:sDate];

// Convert to new Date Format
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *newDate = [dateFormatter stringFromDate:date]; 

【讨论】:

  • 一个问题......它在模拟器上运行良好,但它在真实设备上不起作用?
  • 您的设备有什么问题?它会给出错误吗?碰撞?你需要描述你的问题...
  • 它在任何步骤的转换中都给出了 null ...但在模拟器上它给出了确切的结果,例如 date 等于 null ,new date null 但在模拟器上它工作得很好我在两台设备上试过了.. . 同样的问题
  • 如果它适用于模拟器但不适用于设备,那么它可能是您的其他代码的另一个问题。我在我的项目中多次在模拟器和设备上使用了这个确切的代码,我只看到了 dateFormat 不正确的问题。也许发布您的项目或更多代码。
  • NSString *sStatusDate= [objStatusDic valueForKey:@"created_at"]; NSDateFormatter *objDateFormatter = [[NSDateFormatter alloc] init]; [objDateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZZZ yyyy"]; NSDate *objDate = [objDateFormatter dateFromString:sStatusDate]; [objDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; objStatus.StatusDate = [objDateFormatter stringFromDate:objDate];
【解决方案2】:

如果 sDate 是格式为“Sun Jul 17 07:48:34 +0000 2011”的字符串,则必须将其转换为 NSDate。然后,您可以使用第二个 NSDateFormatter 将此日期转换为您想要的格式“yyyy-MM-dd HH:mm:ss”。

如果你需要弄清楚需要转换的字符串,这个网站有一个很好的参考: http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

例如“Sun Jul 17 07:48:34 +0000 2011”可以解析为

[dateFormatter setDateFormat:@"EEE MMM d HH:mm:ss ZZZ yyyy"];

作为一个建议,像“7 月”(应该是 7 月)这样的非标准日期在这里可能会产生问题。使用 strftime() 在纯 C 中转换所需部分会更快。 见参考:http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/rzan5mst263.htm

然后您可以使用

将 unix 时间戳转换回 NSDate
[NSDate dateWithTimeIntervalSince1970:]

使用 C 进行日期/时间解析通常快 10 倍。 NSDateFormatter 是一条慢狗。

【讨论】:

  • 与日期格式模式的良好链接 - 非常有帮助
猜你喜欢
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多