2016-11-27 36 views
0

我从一个Web服务所在的日期字符串格式,包括时区的格式,你可以看到下面的接收JSON数据:如何将包含时区信息的NSString转换为NSDate?

{ 
     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); 
} 

的(1)调试告诉我,如果没有TZ信息串正常工作(除了不遵守我的dateFormatter),但与TZ信息字符串没有。

我怎么能转换包含TZ信息到的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

您的JSON日期字符串中没有时区信息。 – rmaddy

+0

你真的认为格式'YYYY-MM-dd'实际上与字符串'2020-11-03T00:00:00'匹配吗?他们需要匹配。并且不要使用'YYYY',使用'yyyy'一年。 – rmaddy

回答

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"]; 

你会得到的日期每个用户的LOCA按您的日期字符串的时区而不是乐。

+0

是Rajat是对的。您需要将格式更改为yyyy-MM-dd'T'HH:mm:ss –

+0

事实上,日期字符串中没有时区信息(这很糟糕)引发了另一个问题。什么时区应该用来解析这些日期字符串?默认情况下,这些将被视为用户的语言环境时间中的日期,因为它们来自某个服务器,所以这不太可能是正确的。 – rmaddy

+0

是的,我完全同意你@rmaddy,没有时区的字符串,它会根据用户的当地时区转换 – Rajat