C # DateTime для строковой проблемы - PullRequest
5 голосов
/ 11 февраля 2012

Я чувствую, что это то, что я делал тысячу раз, поэтому не уверен, почему это так сложно сейчас.Я создал метод, который просто возвращает сегодняшнюю дату для пользователя на основе его смещения UTC.Но вместо того, чтобы возвращать строку, похожую на дату, она возвращает этот мусор

"䙭/䙭/Ἰ뻱䙭"

Вот код.

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

Когда я вхожу в код, используя точку останова, смещение и теперь оба кажутся правильнымитеперь содержит действительные части даты, которые кажутся точными.Что-то в преобразовании сейчас в строку кажется ужасно неправильным.Также пробовал:

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

Тот же результат.Странная часть кода ниже в другом упражнении работает без проблем

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

Ответы [ 2 ]

3 голосов
/ 11 февраля 2012

Звучит как проблема локализации. Убедитесь, что вы на английском, будь то en-US или похожий.

1 голос
/ 11 февраля 2012

Я предполагаю, что ваше устройство настроено на китайский / японский / корейский язык.Если вы всегда хотите вернуть даты в США, используйте:

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

Редактировать : Учитывая остальные ваши комментарии, я начинаю подозревать, что это может быть вызвано повреждением или ошибкой в ​​реализации MonoDroid.Вы можете попытаться обойти это, построив дату вручную (хотя это по общему признанию не устраняет причину вашей проблемы):

return string.Format("{0:00}/{1:00}/{2:0000}", now.Month, now.Day, now.Year);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...