我想创建一个 NSDateFormatter 来解析像这样的日期“2014-05-13 23:31:41.374577”。所以:
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];
但是,那anotherDateString
is 2014-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 http://www.opensource.apple.com/source/CF/CF-744.19/CFDateFormatter.c这是开源的。可以看出,所有的历法计算都是使用ICU 日历课程 http://userguide.icu-project.org/datetime/calendar.
-
它记载于日历.h https://www.opensource.apple.com/source/ICU/ICU-6.2.6/icuSources/i18n/unicode/calendar.h that Calendar
uses 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.)
* ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)