NSDateFormatter毫秒的错误

我想创build一个NSDateFormatter应该像这样“2014-05-13 23:31:41.374577”parsingdate。 所以:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss.SSSSSS"; NSString *dateString = @"2014-05-13 23:31:41.374577"; NSDate *date = [formatter dateFromString:dateString]; NSString *anotherDateString = [formatter stringFromDate:date]; 

但是, anotherDateString2014-05-13 23:31:41.374000 。 为什么它截断毫秒?

NSDateFormatter似乎只能以毫秒分辨率工作,原因如下:

  • 通过在CFDateFormatterCreateDateFromString设置一个断点,可以看到这个函数是从dateFromString: ::

     (lldb) bt * thread #1: tid = 0x26d03f, 0x018f47d0 CoreFoundation`CFDateFormatterCreateDateFromString, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1 frame #0: 0x018f47d0 CoreFoundation`CFDateFormatterCreateDateFromString frame #1: 0x0116e0ea Foundation`getObjectValue + 248 frame #2: 0x0116dfc7 Foundation`-[NSDateFormatter getObjectValue:forString:errorDescription:] + 206 frame #3: 0x0116879f Foundation`-[NSDateFormatter dateFromString:] + 71 * frame #4: 0x00002d56 foo`main(argc=1, argv=0xbfffee54) + 182 at main.mm:25 
  • CFDateFormatterCreateDateFromString()来自开源的CFDateFormatter.c 。 人们可以看到,所有的日历计算都是使用ICU日历类进行的 。

  • 它在calendar.h中声明: Calendar使用具有毫秒分辨率的UDate

     /** * <code>Calendar</code> is an abstract base class for converting between * a <code>UDate</code> object and a set of integer fields such as * <code>YEAR</code>, <code>MONTH</code>, <code>DAY</code>, <code>HOUR</code>, * and so on. (A <code>UDate</code> object represents a specific instant in * time with millisecond precision. See UDate * for information about the <code>UDate</code> class.) * ...