2012-02-10 24 views
5

Czuję, że to jest coś, co zrobiłem tysiąc razy, więc nie jestem pewien, dlaczego teraz jest tak trudno. Stworzyłem metodę, która po prostu zwraca dzisiejszą datę dla użytkownika na podstawie jego przesunięcia UTC. Ale zamiast wrócić ciąg przypominający datę, to zwrócą śmieciC# DateTime to String Issue

"䙭/䙭/Ἰ뻱䙭" 

Oto kod.

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(); 
} 

Kiedy wchodzę do kodu za pomocą punktu przerwania, offset i teraz oba wydają się prawidłowe. zawiera teraz prawidłowe części daty, które wydają się dokładne. Coś związanego z konwersją na ciąg wydaje się być strasznie złe. Wypróbowano również:

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

Ten sam wynik. Dziwną częścią jest poniższy kod w innej aktywności działa bez problemu.

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

Co kultura jest ten kod działa pod? – Oded

+0

@ Pozwoliłbym powiedzieć, że nie po angielsku! – Zenexer

+0

@Zenexer - Powiedziałbym, że to jest dane. Mój komentarz był bardziej wskaźnikiem do PO. – Oded

Odpowiedz

1

Zakładam, że urządzenie jest ustawione na kulturę chińską/japońską/koreańską. Jeśli zawsze chcesz powrócić US terminów, zastosowanie:

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

Edit: Biorąc pod uwagę pozostałe komentarze, zaczynam podejrzewać, że to może być spowodowane przez uszkodzenie, lub w wyniku błędu w implementacja MonoDroid. Można spróbować pracę wokół niego konstruując datę ręcznie (choć co prawda nie odnosi się do przyczynę swojego wydania)

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

Powiedział, że inne aplikacje działają, więc brzmi to dla konkretnej aplikacji - nie dla konkretnej maszyny. W takim przypadku powinien zbadać, gdzie kultura jest nieprawidłowo ustawiona w jego aplikacji, zamiast ustalać ją indywidualnie. – Zenexer

+0

To nie rozwiązało problemu. Nigdy wcześniej nie miałem takiego problemu i nigdy nie musiałem się martwić globalizacją. Kod, który zwraca prawidłową wartość DateTime, znajduje się w dokładnie tym samym projekcie. – jmease

+0

Czy na pewno śmieci są zwracane przez twoją metodę i nie są konwertowane na nią przez kod wywołujący twoją metodę (na przykład po zapisaniu do pliku)? Wygląda na to, że twój pierwszy symbol "䙭" oznacza "podnosić lub podnosić (sukienkę, spódnicę itp.)"; ledwo związany z datami/czasami. – Douglas

3

Brzmi dla mnie jak problem z lokalizacją. Upewnij się, że faktycznie jesteś w języku angielskim, czy to en-US lub podobnym.