2016-04-18 11 views
0

へのSS ZZZ形式:YYYY-MM-DDTHHの文字列の変換:私は次の形式たとえば</p> <p><code>yyyy-MM-ddTHH:mm:ss zzz</code></p> <p>にWebサービスからJSONのDateTimeを受けていたDateTime

2016-04-18T15:09:21 01:00ミリメートルを

ただし、これをDateTimeオブジェクトに変換することはできません。私は、次のことを試してみました:

文字列が有効なDateTimeとして認識されませんした

var date = DateTime.ParseExact("2016-04-18T15:09:21 01:00", "yyyy-MM-ddTHH:mm:ss zzz", CultureInfo.InvariantCulture); 

var date2 = DateTimeOffset.ParseExact("2016-04-18T15:09:21 01:00", "yyyy-MM-ddTHH:mm:ss zzz", CultureInfo.InvariantCulture); 

これらの行の両方がメッセージと共にSystem.FormatException例外をスローします。

2016-04-18T15:09:21 01:00をDateTimeオブジェクトとして解析するにはどうすればよいですか?

答えて

1

残念ながら、 "zzz"はタイムゾーンのサインを予期しています。

これは動作します。

var date = DateTime.ParseExact("2016-04-18T15:09:21 +01:00", "yyyy-MM-ddTHH:mm:ss zzz",System.Globalization.CultureInfo.InvariantCulture); 
date.Dump(); 

プラス記号を追加します。

var dt="2016-04-18T15:09:21 01:00"; 
dt.Insert(20,"+").Dump(); 
0

ドミトリーには、The "zzz" custom format specifierの正解があります。

オフセットは、先頭の記号で表示さ常にです。プラス記号(+) は、UTCより前の時間を示し、マイナス記号(-)は、UTCより後の時間が であることを示します。 1桁のオフセットは、先行ゼロでフォーマットされます。あなたの文字列は常にyyyy-MM-ddTHH:mm:ss HH:mm形式である場合

、あなたはDateTimeOffsetにそれを解析したい場合は、それを操作に持って

あなたの文字列を空白で分割し、その文字列にDateTime.ParseTimeSpan.Parseとを呼び出し、その値をDateTimeOffset(DateTime, TimeSpan) constructorで使用することをお勧めします。

指定DateTime値とoffsetを用いDateTimeOffset構造の新しいインスタンスを初期化します。

var str = "2016-04-18T15:09:21 01:00"; 
var parts = str.Split(' '); 
var date = DateTime.Parse(parts[0]); 
var offset = TimeSpan.Parse(parts[1]); 
var dto = new DateTimeOffset(date, offset); 

今、あなたは{18.04.2016 15:09:21 +01:00}としてDateTimeOffsetを持っていて、それはあなたがしたい方DateTimeLocalDateTimeまたはUtcDateTimeプロパティです使用することができます。

enter image description here

関連する問題