2016-05-02 19 views
3
var dateValue = "Mon, 02 May 2016 12:00 PM EDT"; 
var date = DateTime.ParseExact(
    dateValue, 
    "ddd, dd MMM yyyy hh:mm tt K", 
    System.Globalization.CultureInfo.InvariantCulture); 

私が知る限りでは、the official format string documentationから、これはうまくいくはずです。代わりに、それはむしろ役に立たないメッセージでSystem.FormatExceptionを発生させます:String was not recognized as a valid DateTime.このDateTime.ParseExact呼び出しが失敗するのはなぜですか?

どうなっているのですか?

+3

ドキュメンテーションには、タイムゾーン文字列を入力として受け入れる方法については何も言及されていないので、これはおそらく問題です。 –

+0

@SamKuhmonen、「More information: "K"カスタム書式指定子」と「K "カスタム書式指定子」の文章で検索してください。そこに 'K'についての良い記述があります。 –

答えて

1

K Custom Format Specifierはタイムゾーン文字列を受け入れません。

文字列の代わりに時間オフセットを指定できる場合は、"z"を使用できます。

var dateValue = "Mon, 02 May 2016 12:00 PM -4"; 
var date = DateTime.ParseExact(
    dateValue, 
    "ddd, dd MMM yyyy hh:mm tt z", 
    System.Globalization.CultureInfo.InvariantCulture); 
+0

私は残念ながら時間オフセットを供給することはできません。このタイムスタンプ文字列は、Webサービスからのものです。しかし、私は '.substring()'でタイムゾーン文字列を切り捨てることができます。 –

+0

これは残念です。あなたの質問に対するコメントにSamiが共有したリンクは、役に立つかもしれない何かを持っています。 –

0

これは

var dateValue = "Mon, 02 May 2016 12:00 PM EDT".Replace("EDT", "-4"); 
var date = DateTime.ParseExact(
dateValue, 
"ddd, dd MMM yyyy hh:mm tt z", 
System.Globalization.CultureInfo.InvariantCulture); 
0

https://msdn.microsoft.com/en-us/library/shx7s921%28v=vs.110%29.aspxを動作するはずですがDateTime.Kind列挙は3人のメンバーを持っていることを指定します。だから、おそらくあなたが種類として "EDT"を指定するのが好きではありません。

Member name Description 
Local   The time represented is local time. 
Unspecified The time represented is not specified as either local time or Coordinated Universal Time (UTC). 
Utc   The time represented is UTC. 
関連する問題