2016-09-29 11 views
0

私は複数の言語を持つアプリケーションを持っています。私は、私がブラジルで使用している標準に日付を変換するという問題を抱えています。私はこれを使用しています。タイムスパンが間違った値を返す

DateTime dataCredito = DateTime.Parse(txtDtCredito.Text); 
if (Culture == "English (United States)") 
{ 
    string dataConvertida = dataCredito.ToString("dd/MM/yyyy"); 
    dataCredito = Convert.ToDateTime(dataConvertida); 
} 

しかし、私は時間のスパンを計算した後

TimeSpan ts = dataNota - dataCredito; 

dataNotaは、2016年9月10日 とdataCreditoは2016年5月10日

それは4日間の違いだが、あるありますtimespanは月が05と09であるように方法を計算しており、その差は米国標準を使用して約123日間です。

タイムスパンを正しく取得するにはどうすればよいですか(この場合は4日間)?

+3

なぜこれを行う必要がありますか? '' 'string dataConvertida = dataCredito.ToString(" dd/MM/yyyy "); dataCredito = Convert.ToDateTime(dataConvertida); '' 'これは意味がありません – tym32167

+3

問題は' TimeSpan'ではなく、 'DateTime'への文字列の解析にあります。 – juharr

+0

あなたのアプリのデフォルトカルチャは何ですか?なぜなら、 'DateTime.Parse'がどのような文化を使うべきかを知らさずに日付を解析しているからです。 –

答えて

-3

Iこれを解決するために管理しました。

私はただ、タイムスパンの前にこれを追加し、今タイムスパンが正しい4.

if (Culture == "English (United States)") 
        { 
         string dataAmericana = dataCredito.ToString("dd/MM/yyyy"); 
         dataCredito = Convert.ToDateTime(dataAmericana); 
         string dataNotaNova = dataNota.ToString("dd/MM/yyyy"); 
         dataNota = Convert.ToDateTime(dataNotaNova); 
        } 
        TimeSpan ts = dataNota - dataCredito; 
+0

それはナンセンスです。日付を文字列に変換して日付に戻すことによって得られるものはありません。日付には書式はありません。あなたはそれが同じ値であることがわかるだろう旋回の前後に 'dataCredito'を調べるためにマウスを使用してください – Plutonix

+0

この作品はどういう意味ですか? dataCreditoは05/10/2016ですが、この変換後は10/05/2016になります。これは質問で尋ねられるものです。 –

1

を返すという問題は、あなたがDateTimeオブジェクトにテキストを変換する方法です。明らかにあなたが「09を交換する必要があり

DateTime dataCredito = DateTime.ParseExact("09/10/2016","dd/MM/yyyy",CultureInfo.InvariantCulture); 

:あなたは暗黙的変換は、独自のロケールに基づいて行うことを許可、明示的にフォーマットをこのように述べている必要があるとき - あなたはそれを変換する方法方法を通知しないことにより、/10/2016 "を入力してください.1桁の数字のサポートが必要な場合は、代わりに" d/M/yyyy "の書式を使用してください。

1

DateTimeを正しく解析するには、DateTime.Parse()DateTime.Parse(String, IFormatProvider)オーバーロードを使用する必要があります。

他のデータ型をカルチャ固有の表現で解析しようとしている場合も同様です。

関連する問題