我从Web服务接收JSON数据,其中日期是字符串格式,并包含时区格式,如下所示:
{
currencyName = EUR;
itemID = 101064027138011;
price = "6.95";
priceIncTAX = 1;
validFromDate = "2016-11-03T00:00:00";
validToDate = "2020-01-01T00:00:00";
}
当我尝试将包含时区的字符串转换为NSDate时,返回值始终为nil / null,如果我手动发送没有时区信息的字符串i,e @“2016-11-03”那么转换工作正常但是结果日期包括时区偏移等,并且不符合我的dateFormatter
我使用以下代码来展示手头的挑战
NSString *validTo = @"2016-11-03";
NSString *validFrom = @"2020-11-03T00:00:00";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd"];
NSDate *validToDate = [dateFormat dateFromString:validTo];
NSDate *validFromDate = [dateFormat dateFromString:validFrom];
if([NWTillHelper isDebug] == 1) {
NSLog(@"WebServices:fetchPriceList:validToDate: >>>> %@ <<<<", validToDate);
NSLog(@"WebServices:fetchPriceList:validFromDate: %@", validFromDate);
}
调试告诉我没有tz信息的字符串工作正常(除了不遵守我的dateFormatter),但是带有tz信息的字符串没有。
如何将包含tz info的字符串转换为NSDate,以及为什么在发送没有时区信息的字符串时它不会粘附到我的dateFormatter。
016-11-27 12:09:22.194 NWMobileTill[4275:235671] WebServices:fetchPriceList:validToDate: >>>> 2016-11-02 16:00:00 +0000 <<<<
2016-11-27 12:09:22.194 NWMobileTill[4275:235671] WebServices:fetchPriceList:validFromDate: (null)
答案 0 :(得分:1)
从此
更改日期格式化程序[dateFormat setDateFormat:@"YYYY-MM-dd"];
到此
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
由于您从服务器和代码中获取的格式不同,因此您使用的是不同的日期格式
修改强>
正如@rmaddy在他的评论中提到的,你没有在你的日期字符串中获得时区,你从服务器得到的日期格式化器会根据用户的当前时区将字符串转换为日期。
作为一个建议,我想提一下你的日期字符串必须包含时区以及类似的东西
2016-11-27T10:39:57-05:30
此字符串包含IST时区和日期格式化程序
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
您将根据日期字符串的时区获取日期,而不是根据用户的区域设置。