2013-02-08 12 views
5

"Fri Sep 11 00:00:00 GMT+04:00 2020"という文字列をDateTimeオブジェクト11.09.2011に変換する必要があります。C#でのUTC日付/時刻文字列の変換

Iは

DateTime result; 
DateTime.TryParseExact(MyString, "ddd MMM dd HH:mm:ss 'GMT'zzz yyyy", 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out result); 

resultを使用{9/10/2020 11:00:00 PM}と等しいです。日付コンポーネントは11.09.2011ない10.09.2011なるよう

どのように私は(私は日付のみを必要とし、時間を気にしない)コードを変更することができますか?

答えて

6

DateTimeOffsetの代わりに、にはのオフセットがあります。あなたが使用しているdocumentation of the zz specifierから:

をdatetime値では、「ZZ」カスタム書式指定子が署名した時間で測定されたUTCからローカルのオペレーティング・システムのタイムゾーンのオフセットを表します。インスタンスのDateTimeKindプロパティの値は反映されません。このため、 "zz"形式指定子は、DateTime値と一緒に使用することはお勧めしません。そこから、あなたは9月11日の真夜中になりますDateTime一部を、取ることができ

DateTimeOffset result; 
bool success = DateTimeOffset.TryParseExact 
     (text, "ddd MMM dd HH:mm:ss 'GMT'zzz yyyy", 
      CultureInfo.InvariantCulture, DateTimeStyles.None, out result); 

だから、で終わるだろう。

あなたはだけ日付をしたい場合は、あなたがLocalDateを作成するために、私のNoda Timeプロジェクトを使用することができます。

LocalDate = OffsetDateTime.FromDateTimeOffset(result).LocalDateTime.Date; 

(私はOffsetDateTimeに直接解析する提案をしてみたいが、私たちはサポートを持っていません

4

C#は純粋なDateタイプを持っていません。
時間を気にしない場合は、DateTimeの部分を無視してください。

常に午前0時にしたい場合は、.Dateプロパティを使用します。これは同じ日付で、深夜0時にDateTimeを返します。

+0

問題は、私が '11.09.2011'(正しい)の代わりに' 10.09.2011'(間違って)を得ることです。 I.私は、 'result'が' 11.09.2011 ... 'と等しくなるようにコードを修正する方法についてのヒントが必要です(ここで...は時間ですが、私にとって無関係です)。 –

関連する問題