--- # Unicode Technical Standard #35, Part 4, Section 8 -- ## Date Format Patterns ??? Rappels: * NSDate = secondes depuis le 1er janvier 2001 à 0h UTC. * NSDateComponents, * Apple se rate chaque année, * NSCalendar, NSTimeZone et NSDateFormatter sont basés sur le standard Unicode -- layout:true Le mardi 31 décembre 2013 à 23 h 59, lequel de ces formats affichera `2013-12-31` ? --- ``` yyyy-MM-DD yyyy-mm-dd YYYY-MM-dd yyyy-MM-dd ``` --- ``` yyyy-MM-DD -> 2013-12-365 yyyy-mm-dd -> 2013-59-31 YYYY-MM-dd -> 2014-12-31 yyyy-MM-dd -> 2013-12-31 ``` --- layout:false # 31 décembre 2013 ## d ≠ D ``` d -> 31 D -> 365 ``` ??? * D = day of year -- ## y ≠ Y ``` y -> 2013 Y -> 2014 ``` ??? * Y = year in "week of years" calendars -- ## w ≠ W -- ``` w -> 1 W -> 5 ``` ??? * W = 5eme semaine du mois * w = 1ere semaine de l'année --- # Jours (de la semaine) -- ## E ``` EEEEE -> M EEEE -> mardi EEE -> mar. EE -> mar. E -> mar. ``` -- ## e -- ``` eeeee -> M eeee -> mardi eee -> mar. ee -> 02 e -> 2 ``` ??? * E = day of week * e = idem, except for 1-2 -- ## F -- ``` F -> 5 // 5eme mardi de décembre ``` ??? * F = day of week in month --- # Heure -- ## a ``` a (06:00) -> AM a (18:00) -> PM ``` -- ## A ``` A (06:00) -> 21600000 A (18:00) -> 64800000 ``` ??? * A = Millisecondes dans la journée --- # Heure ## h, H… À minuit (00:00) : ``` HH -> 00 // 0-23, format usuel FR hh -> 12 // 1-12, format usuel US ``` -- ## … k, K ``` KK -> 00 // 0-11 kk -> 24 // 1-24 ``` --- # Heure ## j -- ***This is a special-purpose symbol.*** -- ``` NSLocale * locale = [NSLocale localeWithLocaleIdentifier:@"fr_FR"]; [NSDateFormatter dateFormatFromTemplate:@"jj" options:0 locale:locale] -> @"HH" ``` -- ``` NSLocale * locale = [NSLocale localeWithLocaleIdentifier:@"en_US"] [NSDateFormatter dateFormatFromTemplate:@"jj" options:0 locale:locale] -> @"h a" ``` ??? * j convertit automatiquement en fonction de la locale * J fait pareil, mais ne rajoute pas le marqueur "am/pm" --- # Timezones -- * Générique (Heure de l'horloge) * Spécifique (Précis par rapport à UTC) -- ## z, Z, v, V, o, O, x, X Pour `"CET"` (Paris) : ``` z -> "UTC+2" // specific format (short) zzzz -> "heure avancée d’Europe centrale" // specific format (long) Z -> "0200" // RFC 822 format ZZZZ -> "UTC+02:00" // localized GMT format ZZZZZ -> "02:00" // IS8601 format v -> "Heure : France" // generic format (short) vvvv -> "heure de l’Europe centrale" // generic format (long) ``` ??? Observation importante : il y a plusieurs informations dans une date. La première est l'instant, absolu. Par exemple mesuré en secondes depuis le 1 janvier 2001 UTC à 0h. La seconde est l'offset : est-ce important pour l'utilisateur? est-ce un offset générique ou spécifique? Quel est le comportement attendu si on rajoute "une semaine"? Il y a des dates génériques qui n'existent pas à cause du DST, et des dates génériques qui arrivent plusieurs fois. --- # Bref. Utilisez ``` [NSDateFormatter dateFormatWithTemplate: options: locale:] ``` ou ``` [NSDateFormatter localizedStringFromDate: dateStyle: timeStyle:] ``` ??? (Sauf si vous affichez des horaires.) --- # Links * [NSDateFormatter Class Reference](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/occ/clm/NSDateFormatter/dateFormatFromTemplate:options:locale:) -- * [Cocoa: Data Formatting Guide](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1) -- * [Date Format Patterns](http://www.unicode.org/reports/tr35/tr35-33/tr35-dates.html#Date_Format_Patterns) -- * [CLDR - Unicode Common Locale Data Repository](http://cldr.unicode.org) -- * [CLDR Survey Tool](http://st.unicode.org/cldr-apps/survey) ??? CLDR, drivé par Apple et Google. * traductions de noms de langues, de pays dans toutes les langues, * formats "standards" de date par locale par exemple, le standard unicode pour l'heure en français est 13:25,. A contrario, le lexique de l'imprimerie nationale recommande 13 h 25. * formats de nombres * standards de typographie (par ex guillemets) * La dernière version est la 33, la documentation Apple mentionne que iOS 6 et 10.8 utilisent la 25, je ne sais pas pour iOS 7 et 10.9.)