2016-08-12 38 views
-2

我知道这已经被问了很多时间,但是我试过的所有解决方案都将格式更改为NSDate,而这不是我想要的。所以我有NSString2016-08-15T00:00:01.000Z,我需要转换为NSDate 原样。我尝试下面的代码:将NSString转换为NSDate而不更改格式

NSString *newDate = @"2016-08-15T00:00:01.000Z" 

     NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init]; 
     [dateFormater setDateStyle:kCFDateFormatterNoStyle]; 
     [dateFormater setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; 
     NSDate *dateFromString = [[NSDate alloc] init]; 
     dateFromString = [dateFormater dateFromString:newDate]; 

但它改变了格式2016-08-18 18:30:00 +0000这不是我想要的。有人可以帮助我,提前谢谢。

+0

NSDate没有格式!它总是一样的。 “格式”一词适用于日期的字符串版本。 – Nishant

+0

所以你的意思是说它不能做到? – TKutal

+0

日期应该是正确的,但删除'Z'的单引号。顺便说一句:当你使用自定义日期格式设置风格没有效果。考虑'NSDate'实例的NSLog显示UTC时区的日期。 – vadian

回答

0

但它改变了格式2016-08-18 18:30:00 +0000

一个NSDate没有的格式,在相同的方法,intdouble没有格式。内部NSDate表示为自参考日期以来的秒数。

当你谈论“格式”时,你是在谈论文本表示,并且相同的值可以有不同的文本表示。例如,“三”,“3”和“三”都是数字3的文本表示 - 数字本身没有格式,但可以用不同的方式表示(格式化)。

尝试将这些三行代码:

NSString *stringFromDate1 = [dateFormater stringFromDate:dateFromString]; 
NSString *stringFromDate2 = [dateFromString description]; 
NSLog(@"%@ | %@ | %@", dateFromString, stringFromDate1, stringFromDate2); 

的输出是什么? stringFromDate1是以原始格式表示的日期值,而stringFromDate2是由description方法产生的格式 - 它们是相同日期,只是格式不同。而运行上面的代码会告诉你,如果NSLog传递一个非字符串对象,它会调用它的description方法来获取它的文本表示,然后可以输出它。

希望大家都有道理!

TL; DR:非字符串数据类型不具有格式,可以将其转换为文本表示或从文本表示转换。

+0

非常感谢您给予时间来解释一些事情,而不是只是对问题进行投票,然后继续前进:) – TKutal