質問

したがって、たとえば、きった時文字列になります。フォーマット日付の文字列"または"フォーマットパターンにしたいことに変換され、通常の日付の値を持つ.

ie

string.Format("{0:ddor MMM yyyy}.", DateTime.Now)

出力

1st Jan 2010

下記を参照のための方法を導き出すための順序数

が手軽に行うことができます。当期純に"st""nd","rd"と"th"終わりのための番号?

役に立ちましたか?

解決

そのようなものはないようです。

それを行うための最も推奨される方法:

var d = DateTime.Now;
var result2 = String.Format("{0:dd}{1} {2:MMM yyyy}", d, Ordinal(d.Day), d);

それを達成するための非常にハッキーな方法は、カスタムを作成することです IFormatProvider. 。 IMOそれはただのトラブルですが、代替方法を示すためだけです...(これについてあまり経験がない、それはあまり「正しい」ことではないかもしれません)

using System;

namespace Test
{
    class Program
    {
        public static string Ordinal(int number)
        {
            string suffix = String.Empty;

            int ones = number % 10;
            int tens = (int)Math.Floor(number / 10M) % 10;

            if (tens == 1)
            {
                suffix = @"\t\h";
            }
            else
            {
                switch (ones)
                {
                    case 1:
                        suffix = @"\s\t";
                        break;

                    case 2:
                        suffix = @"\n\d";
                        break;

                    case 3:
                        suffix = @"\r\d";
                        break;

                    default:
                        suffix = @"\t\h";
                        break;
                }
            }
            return suffix;
        }

        public class MyFormat : IFormatProvider, ICustomFormatter
        {
            public object GetFormat(Type formatType)
            {
                return (formatType == typeof(ICustomFormatter)) ? this : null;

            }

            public string Format(string format, object arg, IFormatProvider formatProvider)
            {
                var d = (DateTime)arg;

                var or = Ordinal(d.Day);

                format = format.Replace("or", or);

                return d.ToString(format);
            }
        }
        static void Main(string[] args)
        {
            var result = String.Format(new MyFormat(), "{0:ddor MMM yyyy}.", DateTime.Now);

            return;
        }
    }
}

Custom IformatProviderの詳細

他のヒント

形式のプロバイダプラグイン可能なものとないので設定できない、デフォルトのフォーマットプロバイダの指定されたタイプです。方法をとる形式の文字列により条約は、通常、もって過負荷をとるIFormatProvider.実践できる二つのクラスなどのMyFormatProvider: IFormatProvider とMyCustomFormatter: ICustomFormatter.

時フォーマット文字列などの"{0:dd}{0:は}{0:MMM}{0:yyyy}"で処理され、おICustomFormatter呼ばれる4回、"dd","は","MMM"、"yyyy"としてのパラメータでフォーマットでき各部。だけを取り扱う"、"の場合には、残りのデフォルトのフォーマットプロバイダです。

しかし、呼び出し側が合格する必要があり、インスタンスのカスタムフォーマットプロバイダが設定します。例えば:

string str = String.Format(MyFormatProvider.Default, "{0:dd}{0:or} {0:MMM} {0:yyyy}", date);

私が知る限りではありませんが逃げることができます。私は今までになかっ械的風味さん一応前に線路がったのが"相対"DateTimeフォーマット文字列が表示されDateTimesのように"1時間前","3日前"など。なの姿を避けることを明示的にパスは私のカスタムIFormatProvider.

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