なIFormatProviderか?
-
21-08-2019 - |
質問
ったので色々と遊んでいて、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の実装を提供文化固有の情報を使用されるフォーマットや解析を数値や日付、時間値:
- の
NumberFormatInfo
クラスの情報を提供するのに使用したフォーマット番号などの通貨を、セパレーター、小数区切り記号は、特定の文化です。については、所定のフォーマット文字列認識NumberFormatInfo
オブジェクトを使用数値フォーマット操作は、標準数値フォーマット文字列およびカスタムの数値形式の文字列です。 - の
DateTimeFormatInfo
クラスの情報を提供するのに使用したフォーマット日時などの、日付と時刻の区切り記号は、特定の文化により発生したいかなる形式の日付の年月日。については、所定のフォーマット文字列認識DateTimeFormatInfo
オブジェクトを使用数値フォーマット操作は、基準日付と時刻の形式の文字列およびカスタム日付と時刻の形式の文字列です。 - の
CultureInfo
クラスは、特定の文化です。そのGetFormat
方法を返しま文化によるNumberFormatInfo
またはDateTimeFormatInfo
オブジェクトかどうかに応じて、CultureInfo
オブジェクトが使用されているフォーマットや解析操作を伴う数字または行うことができます。
きます。NETフレームワークにも対応カスタム設定します。このとき、通常は、の作成フォーマットを実装するクラスの両方IFormatProviderとICustomFormatter.このクラスのインスタンスがパラメータとして渡されたメソッドを実行するカスタムフォーマットの操作など String.Format(IFormatProvider, String, Object[])
.
のDateTimeFormatInfo のクラスは、このインタフェースを実装し、それはあなたのDateTime文字列の書式設定を制御することができます。