2017-02-27 2 views
1

文字列の型をDateTimeOffsetオブジェクトに変更しようとしています。StringからDateTimeOffsetオブジェクトへの型の変更方法

var Result = Convert.ChangeType("2017-02-27T18:00:00.0000000+01:00", 
    typeof(DateTimeOffset), CultureInfo.InvariantCulture); 

私は、これらの文字列

2017-02-27 18:00:00Z

02/27/2017 18:00:00

でも試してみた。しかし、私はいつもInvalidCastExceptionを得ます。

ChangeTypeに渡す正しい文字列は何ですか?開発のために私はDateTimeOffset.Parseメソッドを使用することはできません。あなたがDateTime.Parse()を使用できない場合

+0

'DateTime.Parse'を使用できますか?もしそうなら、 'DateTime'を' DateTimeOffset'に変換するのは簡単です –

+0

残念ながら、開発の理由から私はDateTimeOffset.Parseを使うことはできません。 – Matteo

+0

FYI、DateTime.ParseとDateTimeOffset.Parseは同じではありません。彼はあなたが特にポストで使用できないと言ったものではなく、代わりの機能について質問していました。 – Aaron

答えて

1

、これを試してみてください。

var dateTime = (DateTime)Convert.ChangeType(stringDateTime, 
     typeof(DateTime), CultureInfo.InvariantCulture); 

var dateTimeOffset = new DateTimeOffset(dateTime); 

これはあなたの質問のサンプル入力文字列のすべてのために働くようです。また


、あなたはTypeDescriptor.GetConverter()を試すことができます。

var converter = TypeDescriptor.GetConverter(typeof(DateTimeOffset)); 
var result = converter.CanConvertFrom(typeof(string)) ? 
    (DateTimeOffset)converter.ConvertFrom(stringDateTime) : 
    new DateTimeOffset(); 

しかし02/27/2017 18:00:00から変換しようとするとき、これは動作しません。

stringDateTimeOffsetの変換の詳細については、this SO questionを参照してください。

関連する問題