2016-01-13 32 views
0

嗨,我有日期格式ISO8601为例:如何从ISO8601时间戳只获得日期为字符串ios?

NSString *currentDateString = @"2016-01-12T21:21:22.737+05:30"; 

我想只有与这串2016年1月12日日期:

我试图

[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSDate *currentDate = [dateFormatter dateFromString:currentDateString]; 
NSLog(@"CurrentDate:%@", currentDate); 

其重新调整为空,但我想以yyyy-MM-dd的格式获取日期。

+0

日期格式化程序上的格式字符串需要与要转换的字符串相匹配。由于你的字符串比'yyyy-MM-dd'多,日期格式化程序不能解析它。 –

回答

0

发现使用NSRange的解决方案:

NSString *currentDateString = @"2016-01-12T21:21:22.737+05:30"; 
NSRange range = [currentDateString rangeOfString:@"T"]; 
NSString *newString = [currentDateString substringToIndex:range.location]; 
NSLog(@"%@",newString); 
+0

这不是一个正确的方法,因为它正在做一种字符串操作 –

+0

如果你知道任何最好的做法也被接受。 – Nagarjun

+0

这个解决方案的严重问题(假设你的问题通过'newString'到日期格式化程序)。通过截断字符串,您将丢失原始字符串中指定的时区。这意味着日期格式化程序会将字符串视为本地时间,而不是原始字符串中指定的时区。 – rmaddy

0

请试试这个代码。

NSString *dateString = @"2013-04-18T08:49:58.157+0000"; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; 
// Always use this locale when parsing fixed format date strings 
NSLocale *posix = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
[formatter setLocale:posix]; 
NSDate *date = [formatter dateFromString:dateString]; 
NSLog(@"date = %@", date); 
+0

尝试过,但它不工作。 – Nagarjun

+0

您的解决方案仍然打印日期= 2013-04-18 08:49:58 + 0000.这不是我正在寻找的解决方案。 – Nagarjun

+0

此解决方案已将字符串转换为NSDate格式,之后您可以更改为任何格式 –