1

私が実行すると:
Date.Parse(Now.ToString("M/yy/d"), New Globalization.DateTimeFormatInfo() With {.ShortDatePattern = "M/yy/d"})

エラーが発生しています:

Could not determine the order of year, month, and date from 'M/yy/d'.

この (奇妙な) 形式はどこかで禁止されていますか? バグですか?


この形式が必要な理由がわからないことに注意してください。


提案を編集Date.ParseExact(Now.ToString("M/yy/d"), "M/yy/d",New Globalization.DateTimeFormatInfo() )すると、次のようになり ます。

String was not recognized as a valid DateTime.

Edit2
NET Framework 4.0 (Windows) を使用しています。

4

2 に答える 2

1

この問題は、次の 2 つのコンポーネントの結果です。

  1. 現在のカルチャでは、インバリアント カルチャの既定値 ( ) とは異なる日付区切り記号が使用されています/
  2. /がフォーマット文字列の一部として使用されている場合、DateTime.ParseまたはリテラルのスラッシュとしてDateTime.ParseExactではなく、指定されたフォーマット プロバイダーの日付区切り文字として変換されている場合は、それが何であれ(文字どおりに解釈したい場合は、 「エスケープシーケンス」)。%/

したがって、これを正しく行うには多くの方法があります。

Date.ParseExact(Now.ToString("M/yy/d"), "M%/yy%/d", Nothing) 

ParseExactこれは、スラッシュを文字通りに解釈するように指示するだけです。

Date.ParseExact(Now.ToString("M/yy/d"), "M/yy/d",
              New Globalization.DateTimeFormatInfo() With {.DateSeparator = "/"})

これはParseExact、日付区切り記号としてリテラル スラッシュを使用するように指示し、現在のカルチャの既定の動作を変更します。

余談ですが、入力に特定の形式があることがわかっている場合に適しているため、ParseExact代わりに使用しています。ヒューリスティックを使用して独自にフォーマットを決定しようとしますが、この場合は適切ではありません。ParseParse

于 2012-04-20T15:12:49.307 に答える