2012-02-10 25 views
5

Mi sembra che sia qualcosa che ho fatto mille volte, quindi non sono sicuro del perché sia ​​così difficile ora. Ho creato un metodo che restituisce semplicemente la data di oggi per l'utente in base al loro offset UTC. Ma invece di restituire una stringa simile a una data, restituisce questa immondiziaC# DateTime to String Edizione

"䙭/䙭/Ἰ뻱䙭" 

Ecco il codice.

public string getToday(Context context) 
{ 
    var settings = PreferenceManager.GetDefaultSharedPreferences(context); 
    var offset = settings.GetInt("offset", -5); 
    var now = DateTime.UtcNow.AddHours(offset); 

    return now.ToShortDateString(); 
} 

Quando passo al codice utilizzando un punto di interruzione, offset e ora sembrano entrambi corretti. ora contiene parti di date valide che sembrano tutte accurate. Qualcosa sulla conversione ora in una stringa sembra andare terribilmente male. Anche provato:

return now.ToString("MM/dd/yyyy"); 

Stesso risultato. Parte strana è il codice sottostante in un'altra attività funziona senza problemi

var offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours; 
var now = DateTime.UtcNow.AddHours(offset); 
now.ToString("MM-dd-yyyy") 
+4

Quale cultura è questo codice in esecuzione in? – Oded

+0

@Oded Direi che non è inglese! – Zenexer

+0

@Zenexer - Direi che è un dato di fatto. Il mio commento era più di un puntatore all'OP. – Oded

risposta

1

Suppongo che il dispositivo sia impostato su una cultura cinese/giapponese/coreana. Se si vuole sempre tornare date degli Stati Uniti, l'uso:

return now.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture); 

Edit: Dato il resto dei vostri commenti, sto iniziando a sospettare che questo potrebbe essere causati dalla corruzione, o da un bug in l'implementazione di MonoDroid. Si potrebbe provare a lavorare intorno ad esso costruendo la data manualmente (anche se questo certamente non affronta la causa del problema):

return string.Format("{0:00}/{1:00}/{2:0000}", now.Month, now.Day, now.Year); 
+0

Ha detto che altre applicazioni hanno funzionato, quindi suona specifico per l'applicazione, non per quello specifico della macchina. In questo caso, dovrebbe indagare per vedere dove la cultura è erroneamente impostata all'interno della sua applicazione, piuttosto che fissarla caso per caso. – Zenexer

+0

Questo non ha risolto il problema. Non ho mai avuto questo problema prima e non ho mai dovuto preoccuparmi della globalizzazione. Il codice che restituisce un DateTime valido si trova nello stesso identico progetto. – jmease

+0

Sei sicuro che la spazzatura viene restituita dal tuo metodo e non viene convertita in essa dal codice che chiama il tuo metodo (ad esempio, al salvataggio nel file)? Sembra che il tuo primo simbolo, '䙭', significhi "alzare o alzare (il vestito, la gonna, ecc.)"; a malapena collegato a date/orari. – Douglas

3

Mi sembra un problema di localizzazione. Assicurati di essere effettivamente in inglese, sia en-US o simile.