2012-09-14 7 views
31

im utilizzando xcode 4.5 (4G182) con iOS 6. NSDateFormatter mostra l'anno sbagliato in iOS 6, come risolvere?NSDateFormatter mostra l'anno sbagliato

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"YYYY-MM-dd"]; 
NSString *str = [dateFormatter stringFromDate:[NSDate date]]; 
NSLog(@"%@ == %@",str,[[dateFormatter dateFromString:str] description]); 

esso stampare " -09-14 == -09-13 16:00:00 +0000"

+0

Non penso che questo sia un "problema iOS 6". Dovresti usare il carattere minuscolo 'y'. Vedi http://stackoverflow.com/questions/6388370/string-formatted-date-picker-date-is-off/6388430#6388430. – Anna

risposta

97

YYYY non è lo stesso di yyyy.

Secondo this page di cui i riferimenti IOS Date format page;

`y`: Year 
`Y`: 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. 

La frase operativa è l'ultima. Utilizzare invece yyyy.


Ulteriori dettagli su come e perché i valori dell'anno possono differire quando si utilizza YYYY:

L'anno ISO week-numerazione inizia il primo giorno (Lunedi) della settimana 01 e termina alla Domenica prima del nuovo anno ISO (quindi senza sovrapposizione o gap). Consiste in 52 o 53 settimane intere. Il numero dell'anno ISO si differenzia dal numero del tradizionale anno civile Gregorian il venerdì, il sabato e la domenica, oppure uno sabato e domenica o solo una domenica all'inizio del tradizionale anno civile gregoriano (che si trovano alla fine del precedente anno ISO ) e un lunedì, martedì e mercoledì o un lunedì e martedì o solo un lunedì, alla fine del tradizionale anno di calendario gregoriano (che sono in settimana 01 della prossima numerazione della settimana ISO anno). Per i giovedì, il numero di anno della numerazione della settimana ISO è sempre uguale al tradizionale numero dell'anno solare gregoriano.

Esempi:

lunedì 29 dicembre 2008 è scritto " -W01-1"

Domenica 3 gennaio 2010 è scritto " -W53-7"

Da https://en.wikipedia.org/wiki/ISO_8601#Week_dates (stile audace g aggiunto)

+0

Grazie .. risolvi anche il mio problema .. :) – Mani

+2

Grazie, sono stato pazzo di questo problema da molto tempo .. Grazie mille –

+2

Penso che ci sia un elemento di spensieratezza nel progettare un formattatore che usa YYYY per formattare un anno in cui "potrebbe non essere sempre lo stesso valore dell'anno solare". "QQQQ" o "XXXX" (ad esempio) non sono stati una scelta meno incline agli errori? "Il valore mnemonico" non sembra davvero la cosa da dare la priorità qui. – Spike0xff

Problemi correlati