【发布时间】:2011-04-05 23:44:06
【问题描述】:
我有一个 ASP.NET MVC 3 网站,它通过 JSON 与我的 iOS 应用程序通信。作为 JSON 响应中发送的对象的一部分,我有yyyy-MM-dd HH:mm:ss ZZZ 格式的日期,它输出2011-04-05 16:28:22 -07:00。我如何在 iOS 中解析它?
这是我现在正在搞乱的代码:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSDate *date = [dateFormatter dateFromString:@"2011-04-05T16:28:22-0700"];
NSLog(@"%@; %@; %@", dateFormatter, date, [NSTimeZone localTimeZone]);
首先要注意的是2011-04-05 16:28:22 -07:00 必须看起来像2011-04-05T16:28:22-0700,其中T 替换第一个空格(假设代表时间,或者字符串的时间部分从哪里开始?),删除第二个空格并删除时区中的冒号。我想我会找到一种方法来格式化 .NET 发回的字符串以符合 iOS 将解析的字符串。
真正的问题是输出的日期比我在 JSON 响应中发送的日期早 7 小时。因此,iOS 将2011-04-05 16:28:22 -07:00 输出为2011-04-05 23:28:22 +0000,就我的应用而言,这是错误的。
到目前为止,我发现的唯一解决方案是将 JSON 中的日期发送为 2011-04-05 16:28:22 +00:00,但这又是错误的,因为我正在更改实际日期。
无论如何,我很感激有人看一看并告诉我如何解析 .NET 通过格式输出的日期字符串 yyyy-MM-dd HH:mm:ss ZZZ(我想可以将其重写为 yyyy-MM-ddTHH:mm:ssZZZ)到NSDate 可以在 iOS 中使用的对象。
【问题讨论】:
-
说到iOS输出,是指NSLog吗?如果是这样,NSLog 总是默认输出 GMT。所以,你的代码没有问题。
-
是的,这就是我所指的。但是,如果
NSLog在 GMT 中输出,那么UILabel输出是什么意思? -
NSDate 将时间存储为 GMT。将任何日期显示为字符串时,您必须使用NSDateFormatter -stringFromDate 方法。 NSDateFormatter 也默认为当前时区。
-
还可以考虑按照Apple Technical Q&A 1480 中的建议设置
locale。
标签: objective-c ios nsdate nsdateformatter