2012-02-10 9 views
5

これは私が何千回もやったような気がするので、なぜ今は難しいのか分かりません。私はUTCのオフセットに基づいてユーザーの今日の日付を単に返すメソッドを作成しました。しかし、日付に似た文字列を返す代わりに、このゴミを返していますC#DateTime to String Issue

"䙭/䙭/Ἰ뻱䙭" 

ここにコードがあります。

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") 
+4

? – Oded

+0

@Oded私は英語ではないでしょう! – Zenexer

+0

@Zenexer - 私はそれが与えられていると思います。私のコメントは、OPへのポインタの多くでした。 – Oded

答えて

1

あなたのデバイスが中国語/日本語/韓国語の文化に設定されているとします。あなたは常に米国の日付を返すようにしたい場合は、使用:

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

編集:コメントの残りの部分を考えると、私はこの破損によって引き起こされる可能性があることを疑い始め、またはのバグによってよMonoDroidの実装。 (これは確かにあなたの問題の原因に対応していませんが)は、手動で日付を構築することにより、それを回避作業を試みることができる:このコードが実行されてどのような文化

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

彼は他のアプリケーションも動作していると言いました。この場合、ケースごとに修正するのではなく、自分のアプリケーション内で文化が間違って設定されているかどうかを調査する必要があります。 – Zenexer

+0

これで問題は解決しませんでした。これまでにこの問題を抱えたことは一度もなく、グローバリゼーションについて心配する必要はありませんでした。有効なDateTimeを返すコードはまったく同じプロジェクト内にあります。 – jmease

+0

あなたのメソッドによってガベージが返されていて、メソッドを呼び出すコード(たとえば、ファイルに保存するとき)によってガベージに変換されていませんか?あなたの最初のシンボル、「䙭」は、「持ち上げたり上げたり(ドレス、スカートなど)」を意味します。日付/時間にほとんど関係しない。 – Douglas

3

ローカリゼーションの問題のような音です。 en-USなど、実際に英語であることを確認してください。