在Objective-C中将日期字符串格式化为NSDate

时间:2011-02-06 22:19:16

标签: objective-c nsdate nsdateformatter

我一直在与一些恼人的日期格式进行斗争,API一直在我的应用程序中返回我。我需要将以下两种类型的日期转换为我可以在我的应用程序中使用的NSDate。

  • SAT 8AM
  • 周一晚上8:30

目前我正在使用与此类似的东西......

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"eee ha"];
NSDate *date = [formatter dateFromString:dateString];

这有两个问题...

  • 似乎把时间缩短了1个小时(这是我需要管理的一些时区内容)
  • 无法处理MON 8:30PM日期......

我真的很感激这方面的一些帮助!非常感谢: - )

3 个答案:

答案 0 :(得分:1)

我不知道为什么它会把时间缩短一小时,但到了晚上8:30你需要使用hh:mma。为了处理8:30 PM和8PM格式,我会设置一个if else条件。

答案 1 :(得分:1)

正如dreamlax指出的那样,如果您希望它支持多种日期格式,那么您将不得不使用这些格式调用它,直到匹配为止。

对于您在时区上的不匹配,格式化程序的时区默认为系统的当前时区。你能展示一些代码来证明它是如何关闭一小时的吗?我没有看到类似的东西。

当然,这也是一件非常奇怪的事情。你知道“SAT 8AM”的意思是“参考日期后第一个星期六的当地时间8a”,对吗?所以这将是1970年1月3日。它并不意味着“今天之后的下一个星期六”或类似的东西。我可以想象一些奇怪的情况,这会有用,但我想确保它是你真正想要做的。

答案 2 :(得分:0)

如果你不确定你将收到什么样的输入(从SAT 8AM或MON 8:30 AM开始),我建议创建一个返回NSDate并将NSString作为输入的方法。在这种方法中,你会:

  • 使用类似NSRange range = [incomingString rangeOfString:@“:”];
  • 如果range == nil,则[formatter setDateFormat:@“eee ha”];
  • else [formatter setDateFormat:@“eee hh:mma”];
  • 最后返回[formatter dateFromString:dateString];