質問

ったので色々と遊んでいて、Datetime.ParseExact方法を望んでいるIFormatProvider...

でnullを入力するかもしれないですか?

役に立ちましたか?

解決

イアン・ボイドの答えにADITIONてます:

またCultureInfoは、このインタフェースを実装し、あなたのケースで使用することができます。だから、例えばフランスの日付文字列を解析でき、あなたが使用することができます。

var ci = new CultureInfo("fr-FR");
DateTime dt = DateTime.ParseExact(yourDateInputString, yourFormatString, ci);

他のヒント

IFormatProvider インタフェースは正常に実施する CultureInfo クラスは、例えば:

  • CultureInfo.CurrentCulture
  • CultureInfo.CurrentUICulture
  • CultureInfo.InvariantCulture
  • CultureInfo.CreateSpecificCulture("de-CA") //German (Canada)

ユーザーインターフェイスはゲートウェイ機能のsetを取得しの文化固有のデータからの文化です。のできる共通の文化オブジェクトは、 IFormatProvider 問い合わせることができっていると言っても過言ではあり:

  • DateTimeFormatInfo
  • NumberFormatInfo

というのは通常、この作業をお願いし IFormatProvider っていただけるように DateTimeFormatInfo オブジェクト:

DateTimeFormatInfo format;
format = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
if (format != null)
   DoStuffWithDatesOrTimes(format);

が内部においても知る IFormatProvider インタフェースが実施しているクラスを降りから CultureInfo, 以降から DateTimeFormatInfo, でもキャストのインタフェースの"直接":

CultureInfo info = provider as CultureInfo;
if (info != null)
   format = info.DateTimeInfo;
else
{
   DateTimeFormatInfo dtfi = provider as DateTimeFormatInfo;
   if (dtfi != null)
       format = dtfi;
   else
       format = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
}

if (format != null)
   DoStuffWithDatesOrTimes(format);

ないこと

すべての作業はすでに書き込まれています:

DateTimeFormatInfo から IFormatProvider:

DateTimeFormatInfo format = DateTimeFormatInfo.GetInstance(provider);

NumberFormatInfo から IFormatProvider:

NumberFormatInfo format = NumberFormatInfo.GetInstance(provider);

の値 IFormatProvider が作成する独自の文化をオブジェクト。どを実施 IFormatProvider, 戻すオブジェていたため、バイパスの文化がある。

も利用できます IFormatProvider しなければならないというのを渡す任意の文化物によ IFormatProvider.E.g.その名の神と異文化

  • Jehova
  • Yahwe
  • יהוה
  • אהיה אשר אהיה

このトカスタム LordsNameFormatInfo クラス乗りする内 IFormatProvider, ときの保全に熟.

実際にはまった電話をする必要があり GetFormat 方法 IFormatProvider ます。

必要なときにいつでも、 IFormatProvider を渡すことができる CultureInfo オブジェクト:

DateTime.Now.ToString(CultureInfo.CurrentCulture);

endTime.ToString(CultureInfo.InvariantCulture);

transactionID.toString(CultureInfo.CreateSpecificCulture("qps-ploc"));

注意:任意のコードが入ります。無属性が必要です。

IFormatProviderはこれを行うには正しい方法ではないとしてnullを渡します。ユーザーが自分のPC上のカスタム日付/時刻の形式を持っている場合は、解析して文字列に変換する際に問題があるでしょう。私は文字列に変換するときに、誰かがするIFormatProviderとしてnullを渡されていたバグを修正しました。

の代わりにあなたがCultureInfo.InvariantCultureを使用する必要があります。

間違ってます:

string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", null);

正しいます:

string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", CultureInfo.InvariantCulture);

あなたがここで見ることができます http://msdn.microsoft.com/ EN-US /ライブラリ/ system.iformatprovider.aspxする

そこの発言との例を参照してください。

するIFormatProvider には、問題のメソッドへの文化情報を提供します。 のDateTimeFormatInfo にはするIFormatProviderを実装し、形式を指定することができますあなたは、日付/時間の中で表示させたい。例としては、関連するMSDNのページで確認できます。

による MSDN

きます。NET Frameworkは以下の 定義済みIFormatProviderの実装を提供文化固有の情報を使用されるフォーマットや解析を数値や日付、時間値:

  1. NumberFormatInfo クラスの情報を提供するのに使用したフォーマット番号などの通貨を、セパレーター、小数区切り記号は、特定の文化です。については、所定のフォーマット文字列認識 NumberFormatInfo オブジェクトを使用数値フォーマット操作は、標準数値フォーマット文字列およびカスタムの数値形式の文字列です。
  2. DateTimeFormatInfo クラスの情報を提供するのに使用したフォーマット日時などの、日付と時刻の区切り記号は、特定の文化により発生したいかなる形式の日付の年月日。については、所定のフォーマット文字列認識 DateTimeFormatInfo オブジェクトを使用数値フォーマット操作は、基準日付と時刻の形式の文字列およびカスタム日付と時刻の形式の文字列です。
  3. CultureInfo クラスは、特定の文化です。その GetFormat 方法を返しま文化による NumberFormatInfo または DateTimeFormatInfo オブジェクトかどうかに応じて、 CultureInfo オブジェクトが使用されているフォーマットや解析操作を伴う数字または行うことができます。

きます。NETフレームワークにも対応カスタム設定します。このとき、通常は、の作成フォーマットを実装するクラスの両方IFormatProviderとICustomFormatter.このクラスのインスタンスがパラメータとして渡されたメソッドを実行するカスタムフォーマットの操作など String.Format(IFormatProvider, String, Object[]).

のDateTimeFormatInfo のクラスは、このインタフェースを実装し、それはあなたのDateTime文字列の書式設定を制御することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top