关于NSDate的格式符,大家常用的有 yy MM dd等,但是其实格式符远不止这些。
我们常用到的格式符,举个例子
NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yy年MM月dd日"];
NSString *timeStr = [formatter stringFromDate:date];
NSLog(@"today %@", timeStr);
今天是2015年2月3日,所以输出如下:
today 15年02月03日
但是呢,我不小心把dd写为了DD,这个输出就困扰我了
today 15年02月34日
这是什么意思,2月还能超过28天!遍寻文档,后来在Unicode Technical Standard中找到了答案。
2月3日,恰好是2015年的第34天。
仔细看文档,会发现unicode标准文档提供了非常多的格式,用起来会非常方便。
要注意的是,苹果不同的语言版本,对unicode标准的支持也是有所不同的,在苹果官方文档中有说明
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html
setDateFormat:
. The format string uses the format patterns from the Unicode Technical Standard #35. The version of the standard varies with release of the operating system:OS X v10.9 and iOS 7 use version tr35-31.
OS X v10.8 and iOS 6 use version tr35-25.
iOS 5 uses version tr35-19.
OS X v10.7 and iOS 4.3 use version tr35-17.
iOS 4.0, iOS 4.1, and iOS 4.2 use version tr35-15.
iOS 3.2 uses version tr35-12.
OS X v10.6, iOS 3.0, and iOS 3.1 use version tr35-10.
OS X v10.5 uses version tr35-6.
OS X v10.4 uses version tr35-4.
Field | Sym. | No. | Example | Description | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
era | G | 1..3 | AD | Era - Replaced with the Era string for the current date. One to three letters for the abbreviated form, four letters for the long form, five for the narrow form. | ||||||||||||||||||||||||||||||||||||
4 | Anno Domini | |||||||||||||||||||||||||||||||||||||||
5 | A | |||||||||||||||||||||||||||||||||||||||
year | y | 1..n | 1996 | Year. Normally the length specifies the padding, but for two letters it also specifies the maximum length. Example:
|
||||||||||||||||||||||||||||||||||||
Y | 1..n | 1997 | Year (in "Week of Year" based calendars). This year designation is used in ISO year-week calendar as defined by ISO 8601, but can be used in non-Gregorian based calendar systems where week date processing is desired. May not always be the same value as calendar year. | |||||||||||||||||||||||||||||||||||||
u | 1..n | 4601 | Extended year. This is a single number designating the year of this calendar system, encompassing all supra-year fields. For example, for the Julian calendar system, year numbers are positive, with an era of BCE or CE. An extended year value for the Julian calendar system assigns positive values to CE years and negative values to BCE years, with 1 BCE being year 0. | |||||||||||||||||||||||||||||||||||||
quarter | Q | 1..2 | 02 | Quarter - Use one or two for the numerical quarter, three for the abbreviation, or four for the full name. | ||||||||||||||||||||||||||||||||||||
3 | Q2 | |||||||||||||||||||||||||||||||||||||||
4 | 2nd quarter | |||||||||||||||||||||||||||||||||||||||
q | 1..2 | 02 | Stand-Alone Quarter - Use one or two for the numerical quarter, three for the abbreviation, or four for the full name. | |||||||||||||||||||||||||||||||||||||
3 | Q2 | |||||||||||||||||||||||||||||||||||||||
4 | 2nd quarter | |||||||||||||||||||||||||||||||||||||||
month | M | 1..2 | 09 | Month - Use one or two for the numerical month, three for the abbreviation, or four for the full name, or five for the narrow name. | ||||||||||||||||||||||||||||||||||||
3 | Sept | |||||||||||||||||||||||||||||||||||||||
4 | September | |||||||||||||||||||||||||||||||||||||||
5 | S | |||||||||||||||||||||||||||||||||||||||
L | 1..2 | 09 | Stand-Alone Month - Use one or two for the numerical month, three for the abbreviation, or four for the full name, or 5 for the narrow name. | |||||||||||||||||||||||||||||||||||||
3 | Sept | |||||||||||||||||||||||||||||||||||||||
4 | September | |||||||||||||||||||||||||||||||||||||||
5 | S | |||||||||||||||||||||||||||||||||||||||
l | 1 | * | Special symbol for Chinese leap month, used in combination with M. Only used with the Chinese calendar. | |||||||||||||||||||||||||||||||||||||
week | w | 1..2 | 27 | Week of Year. | ||||||||||||||||||||||||||||||||||||
W | 1 | 3 | Week of Month | |||||||||||||||||||||||||||||||||||||
day | d | 1..2 | 1 | Date - Day of the month | ||||||||||||||||||||||||||||||||||||
D | 1..3 | 345 | Day of year | |||||||||||||||||||||||||||||||||||||
F | 1 | 2 |
Day of Week in Month. The example is for the 2nd Wed in July | |||||||||||||||||||||||||||||||||||||
g | 1..n | 2451334 | Modified Julian day. This is different from the conventional Julian day number in two regards. First, it demarcates days at local zone midnight, rather than noon GMT. Second, it is a local number; that is, it depends on the local time zone. It can be thought of as a single number that encompasses all the date-related fields. | |||||||||||||||||||||||||||||||||||||
week day |
E | 1..3 | Tues | Day of week - Use one through three letters for the short day, or four for the full name, or five for the narrow name. | ||||||||||||||||||||||||||||||||||||
4 | Tuesday | |||||||||||||||||||||||||||||||||||||||
5 | T | |||||||||||||||||||||||||||||||||||||||
e | 1..2 | 2 | Local day of week. Same as E except adds a numeric value that will depend on the local starting day of the week, using one or two letters. For this example, Monday is the first day of the week. | |||||||||||||||||||||||||||||||||||||
3 | Tues | |||||||||||||||||||||||||||||||||||||||
4 | Tuesday | |||||||||||||||||||||||||||||||||||||||
5 | T | |||||||||||||||||||||||||||||||||||||||
c | 1 | 2 | Stand-Alone local day of week - Use one letter for the local numeric value (same as 'e'), three for the short day, or four for the full name, or five for the narrow name. | |||||||||||||||||||||||||||||||||||||
3 | Tues | |||||||||||||||||||||||||||||||||||||||
4 | Tuesday | |||||||||||||||||||||||||||||||||||||||
5 | T | |||||||||||||||||||||||||||||||||||||||
period | a | 1 | AM | AM or PM | ||||||||||||||||||||||||||||||||||||
hour | h | 1..2 | 11 | Hour [1-12]. | ||||||||||||||||||||||||||||||||||||
H | 1..2 | 13 | Hour [0-23]. | |||||||||||||||||||||||||||||||||||||
K | 1..2 | 0 | Hour [0-11]. | |||||||||||||||||||||||||||||||||||||
k | 1..2 | 24 | Hour [1-24]. | |||||||||||||||||||||||||||||||||||||
j | 1..2 | n/a | This is a special-purpose symbol. It must not occur in pattern or skeleton data. Instead, it is reserved for use in APIs doing flexible date pattern generation. In such a context, it requests the preferred format (12 versus 24 hour) for the language in question, as determined by whether h, H, K, or k is used in the standard short time format for the locale, and should be replaced by h, H, K, or k before beginning a match against availableFormats data. | |||||||||||||||||||||||||||||||||||||
minute | m | 1..2 | 59 | Minute. Use one or two for zero padding. | ||||||||||||||||||||||||||||||||||||
second | s | 1..2 | 12 | Second. Use one or two for zero padding. | ||||||||||||||||||||||||||||||||||||
S | 1..n | 3457 | Fractional Second - rounds to the count of letters. (example is for 12.34567) | |||||||||||||||||||||||||||||||||||||
A | 1..n | 69540000 | Milliseconds in day. This field behaves exactly like a composite of all time-related fields, not including the zone fields. As such, it also reflects discontinuities of those fields on DST transition days. On a day of DST onset, it will jump forward. On a day of DST cessation, it will jump backward. This reflects the fact that is must be combined with the offset field to obtain a unique local time value. | |||||||||||||||||||||||||||||||||||||
zone | z | 1..3 | PDT fallbacks: HPG-8:00GMT-08:00 |
Time Zone - with the specific non-location format. Where that is unavailable, falls back to localized GMT format. Use one to three letters for the short format or four for the full format. In the short format, metazone names are not used unless the commonlyUsed flag is on in the locale. For more information about timezone formats, see Appendix J: Time Zone Display Names. |
||||||||||||||||||||||||||||||||||||
4 | Pacific Daylight Time fallbacks: HPG-8:00GMT-08:00 |
|||||||||||||||||||||||||||||||||||||||
Z | 1..3 | -0800 | Time Zone - Use one to three letters for RFC 822 format, four letters for the localized GMT format. For more information about timezone formats, see Appendix J: Time Zone Display Names. |
|||||||||||||||||||||||||||||||||||||
4 | HPG+8:00 fallbacks: GMT-08:00 |
|||||||||||||||||||||||||||||||||||||||
v | 1 | PT | Time Zone - with the generic non-location format. Where that is unavailable, uses special fallback rules given in Appendix J. Use one letter for short format, four for long format. For more information about timezone formats, see Appendix J: Time Zone Display Names. |
|||||||||||||||||||||||||||||||||||||
4 | Pacific Time fallbacks: Pacific Time (Canada) Pacific Time (Whitehorse) United States (Los Angeles) Time HPG-8:35 GMT-08:35 |
|||||||||||||||||||||||||||||||||||||||
V | 1 | PST fallbacks: HPG-8:00GMT-08:00 |
Time Zone - with the same format as z, except that metazone timezone abbreviations are to be displayed if available, regardless of the value of commonlyUsed. For more information about timezone formats, see Appendix J: Time Zone Display Names. |
|||||||||||||||||||||||||||||||||||||
4 | United States (Los Angeles) Time fallbacks: HPG-8:35 GMT-08:35 |
Time Zone - with the generic location format. Where that is unavailable, falls back to the localized GMT format. (Fallback is only necessary with a GMT-style Time Zone ID, like Etc/GMT-830.) This is especially useful when presenting possible timezone choices for user selection, since the naming is more uniform than the v format. For more information about timezone formats, see Appendix J: Time Zone Display Names. |
All non-letter character represent themselves in a pattern, except for the single quote. It is used to 'escape' letters. Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.
http://unicode.org/reports/tr35/#Date_Format_Patterns