Gup*_*R4c 16 objective-c nsdate nsdateformatter ios
我有一个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]);
Run Code Online (Sandbox Code Playgroud)
首先要注意的是,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中使用的对象.
Gup*_*R4c 14
我不知道这是多么正确,但我最终发现在.NET中我必须这样做,DateTime.ToUniversalTime().ToString("yyyy-MM-ddHH:mm:ss")而在iOS方面,我必须这样做:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-ddHH:mm:ss"];
NSDate *date = [dateFormatter dateFromString:@"2011-04-0600:28:27"];
Run Code Online (Sandbox Code Playgroud)
只有这样,NSLog输出时的日期是正确的,所以我假设我终于得到了一个合适的日期/时间.
您的iOS日期解析代码是正确的:2011-04-05 16:28:22 -07:00并且2011-04-05 23:28:22 +0000代表同一时间,仅在不同的时区.您唯一的问题是NSDate实际上并不存储时区,因此[date description]使用UTC输出.
| 归档时间: |
|
| 查看次数: |
32609 次 |
| 最近记录: |