ここでは、文字列を書式化(フォーマット)する方法、.NET Frameworkでサポートされている書式指定子とそのフォーマット例について見ていきます。

なお、カルチャによっては例示しているものと異なる結果にフォーマットされる箇所がありますが、特に断りのない場合はja-JPの環境で実行した結果となります。 カルチャと書式については以下の文書も参照してください。

以下の表は、.NET Frameworkで使用できる標準の書式指定文字列の一覧とフォーマット例の早見表です。 各書式指定子のフォーマットについては表中のリンク先で解説しています。

桁と揃えの書式指定文字列
形式 書式指定例 フォーマット結果 解説へのリンク
右揃え Console.WriteLine("|{0,10}|", "foo"); "| foo|" 解説へ
左揃え Console.WriteLine("|{0,-10}|", "bar"); "|bar |" 解説へ
0埋め Console.WriteLine("|{0:D6}|", 16); "|000016|" 解説へ
0埋め+右揃え Console.WriteLine("|{0,10:D6}|", 1234); "| 001234|" 解説へ
0埋め+左揃え Console.WriteLine("|{0,-10:D6}|", 1234); "|001234 |" 解説へ
形式 書式指定例 フォーマット結果 解説へのリンク
数値の書式指定文字列
形式 書式指定子 フォーマット結果 解説へのリンク
10進 (D, d) 72 D
D4
"72"
"0072"
解説へ
16進 (X, x) 42 X
X4
x4
"2A"
"002A"
"002a"
解説へ
固定小数点 (F, f) 3.1416 F
F3
F6
"3.14"
"3.142"
"3.141600"
解説へ
指数 (E, e) 0.9876 E
E2
E4
e4
"9.876000E-001"
"9.88E-001"
"9.8760E-001"
"9.8760e-001"
解説へ
パーセント (P, p) 0.0625 P
P1
P4
"6.25%"
"6.3%"
"6.2500%"
解説へ
数値 (N, n) 12345 N
N0
N4
"12,345.00"
"12,345"
"12,345.0000"
解説へ
一般 (G, g) 123456.78 G
G4
g4
"123456.78"
"1.235E+05"
"1.235e+05"
解説へ
通貨 (C, c) -12345.67 C
C3
"-¥12,346"
"-¥12,345.670"
解説へ
ラウンドトリップ (R, r) 0.6666667
(float/Single)
R
R0
R4
"0.6666667"
"0.6666667"
"0.6666667"
解説へ
形式 書式指定子 フォーマット結果 解説へのリンク
日付と時刻の書式指定文字列
形式 書式指定子 フォーマット結果 解説へのリンク
RFC1123 (R, r) DateTime.Now
DateTime.UtcNow
DateTimeOffset.Now
r "Tue, 14 Sep 2010 01:02:03 GMT"
"Mon, 13 Sep 2010 16:02:03 GMT"
"Mon, 13 Sep 2010 16:02:03 GMT"
解説へ
W3C-DTF/ISO8601 (O, o) DateTime.Now
DateTime.UtcNow
DateTimeOffset.Now
o "2010-09-14T01:02:03.1234567+09:00"
"2010-09-13T16:02:03.1234567Z"
"2010-09-14T01:02:03.1234567+09:00"
解説へ
ソート可能形式 (s) DateTime.Now
DateTime.UtcNow
DateTimeOffset.Now
s "2010-09-14T01:02:03"
"2010-09-13T16:02:03"
"2010-09-14T01:02:03"
解説へ
ソート可能UTC形式 (u) DateTime.Now
DateTime.UtcNow
DateTimeOffset.Now
u "2010-09-14 01:02:03Z"
"2010-09-13 16:02:03Z"
"2010-09-13 16:02:03Z"
解説へ
日付のみ (D, d) DateTime.Now D
d
"2010年9月14日"
"2010/09/14"
解説へ
時刻のみ (T, t) DateTime.Now T
t
"1:02:03"
"1:02"
解説へ
年月のみ (Y, y) DateTime.Now Y "2010年9月" 解説へ
月日のみ (M, m) DateTime.Now M "9月14日" 解説へ
完全な日付と時刻の形式 (F, f) DateTime.Now F
f
"2010年9月14日 1:02:03"
"2010年9月14日 1:02"
解説へ
一般的な日付と時刻の形式 (G, g) DateTime.Now G
g
"2010/09/14 1:02:03"
"2010/09/14 1:02"
解説へ
UTCでの完全な日付と日時の形式 (U) DateTime.Now U "2010年9月13日 16:02:03" 解説へ
形式 書式指定子 フォーマット結果 解説へのリンク

§1 書式指定子の概要

§1.1 書式化に対応したメソッドと書式指定子

基本型のToString、Console.WriteLineStreamWriter.WriteLineString.Formatなどのメソッドは、値を文字列化する際に値の書式(フォーマット)を指定することができます。 .NET Frameworkでは、これらの書式は書式指定子として定義されています。 書式指定子を使用することで、有効桁数やゼロ埋めなどを指定して値を文字列化することが出来ます。

書式を指定して数値を文字列化する
using System;

class Sample {
  static void Main()
  {
    double doubleValue = 3.141592654;

    Console.WriteLine(doubleValue.ToString()); // デフォルトの書式で文字列化
    Console.WriteLine(doubleValue.ToString("N3")); // N(数値)の書式かつ有効桁数に3を指定して文字列化
    Console.WriteLine(doubleValue.ToString("###.000000")); // 整数部3桁、小数部6桁のカスタム書式で文字列化
  }
}
実行結果
3.141592654
3.142
3.141593
書式を指定してDateTime型を文字列化する
using System;

class Sample {
  static void Main()
  {
    DateTime dateTimeValue = new DateTime(2010, 9, 14, 1, 2, 3);

    Console.WriteLine(dateTimeValue.ToString()); // デフォルトの書式で文字列化
    Console.WriteLine(dateTimeValue.ToString("r")); // r(RFC1123)の書式で文字列化
    Console.WriteLine(dateTimeValue.ToString("s")); // s(ソート可能形式)の書式で文字列化
    Console.WriteLine(dateTimeValue.ToString("yyyy/MM/dd (dddd) hh:mm:ss")); // カスタム書式で文字列化
  }
}
実行結果
2010/09/14 1:02:03
Tue, 14 Sep 2010 01:02:03 GMT
2010-09-14T01:02:03
2010/09/14 (火曜日) 01:02:03

また、String.Formatメソッド、Console.WriteLineメソッドでは、複合書式設定を使って引数に適用する書式を個々に指定して文字列化することができます。

個々の引数に別個の書式を指定して文字列化する(複合書式設定)
using System;

class Sample {
  static void Main()
  {
    DateTime dateTimeValue = new DateTime(2010, 9, 14, 1, 2, 3);
    double doubleValue = 3.141592654;
    int intValue = 72;

    // 0番目の引数に"hh:ss"、1番目の引数に"N2"、2番目の引数に"D4"の各書式を適用して標準出力に表示する
    Console.WriteLine("{0:hh:ss} {1:N2} {2:D4}", dateTimeValue, doubleValue, intValue);

    // 上記と同様に書式を適用して文字列化する
    string formatted = string.Format("{0:hh:ss} {1:N2} {2:D4}", dateTimeValue, doubleValue, intValue);

    Console.WriteLine(formatted);
  }
}
実行結果
01:03 3.14 0072
01:03 3.14 0072

複合書式設定では書式のほか、右詰め・左詰めでのアラインメントを指定することも出来ます。

§1.2 複合書式設定と0埋め・右揃え・左揃え

複合書式設定を用いることで、0埋め(ゼロパディング)、右詰め(右揃え)・左詰め(左揃え)することができます。 (MSDN: 複合書式設定)

複合書式設定の形式は次のようになっています。

複合書式設定の形式
{index[,alignment][:formatString]}

各パラメータの意味は次のとおりです。

index
書式を適用する引数のインデックス
alignment
文字列化する際の幅(桁数) 文字列の長さが指定した幅より大きい場合は無視される(切り詰めない)
幅が正の場合
指定した幅で右揃えにする
幅が負の場合
指定した幅で左揃えにする
formatString
文字列化する際の書式

indexは必須、alignmentformatStringは省略可能で組み合わせて指定することができます。 0埋めの際の書式(D6など)については後述します。

複合書式と0埋め・右揃え・左揃え・桁数の例
using System;

class Sample {
  static void Main()
  {
    Console.WriteLine("|0123456789|");        // (桁取り)
    Console.WriteLine("|{0,10}|", 72);        // 数値を幅10で右揃え
    Console.WriteLine("|{0,-10}|", 42);       // 数値を幅10で左揃え
    Console.WriteLine("|{0,10}|", "foo");     // 文字列を幅10で右揃え
    Console.WriteLine("|{0,-10}|", "bar");    // 文字列を幅10で左揃え
    Console.WriteLine("|{0,3}|", 16);         // 2桁の数値を幅3で右揃え
    Console.WriteLine("|{0,3}|", 12345);      // 5桁の数値を幅3で右揃え
    Console.WriteLine("|{0:D6}|", 16);        // 2桁の数値を0埋めして6桁に
    Console.WriteLine("|{0:D6}|", 12345);     // 5桁の数値を0埋めして6桁に
    Console.WriteLine("|{0,10:D6}|", 16);     // 2桁の数値を0埋めして6桁にし、幅10で右揃え
    Console.WriteLine("|{0,-10:D6}|", 12345); // 5桁の数値を0埋めして6桁にし、幅10で左揃え
  }
}
実行結果
|0123456789|
|        72|
|42        |
|       foo|
|bar       |
| 16|
|12345|
|000016|
|012345|
|    000016|
|012345    |

次のように、複数の引数に対して個別に複合書式を指定することも出来ます。

複数の引数に対する複合書式の指定例
using System;

class Sample {
  static void Main()
  {
    // 0番目の引数を0埋めして3桁に
    // 1番目の引数を幅5で左詰め
    // 2番目の引数を0埋めして3桁にし、幅5で右詰め
    Console.WriteLine("|{0:D3}/{1,-5}/{2,5:D3}|", 72, 16, 42);
  }
}
実行結果
|072/16   /  042|

§1.3 複合書式設定と中括弧のエスケープ

中括弧そのものを出力したい場合は、"{{"や"}}"のように二つ重ねることでエスケープされ、"{"と"}"が出力されます。

複合書式で中括弧を出力する
using System;

class Sample {
  static void Main()
  {
    Console.WriteLine("{0}}}", 72);       // 閉じ中括弧をエスケープ
    Console.WriteLine("{{{0}", 16);       // 開き中括弧をエスケープ
    Console.WriteLine("{{0:D6}}", 42);    // 開き中括弧と閉じ中括弧をエスケープ (括弧の中は複合書式とはみなされない)
    Console.WriteLine("{{{0:D6}}}", 42);  // 開き中括弧と閉じ中括弧をエスケープし、間に複合書式を含める
  }
}
実行結果
72}
{16
{0:D6}
{000042}


§2 標準の書式指定文字列

標準の書式指定子とは、あらかじめ定義された書式を D, N, r などの文字で表すものです。 書式指定子と桁数などの数値と組み合わせた書式指定文字列を指定することにより、さまざまな形式にフォーマットすることができます。

整数・日時と書式指定文字列の例
using System;

class Sample {
  static void Main()
  {
    int intValue = 72;

    // 同じ値に対して様々な書式指定文字列を指定して出力する
    Console.WriteLine("{0:D}   {0:D4}   {0:N4}", intValue);

    DateTime dateTimeValue = new DateTime(2010, 9, 14, 1, 2, 3);

    Console.WriteLine("{0}   {0:r}   {0:s}", dateTimeValue);
  }
}
実行結果
72   0072   72.0000
2010/09/14 1:02:03   Tue, 14 Sep 2010 01:02:03 GMT   2010-09-14T01:02:03

§2.1 数値の書式指定子

以下の書式指定子は数値型の値に対して指定できます。 (MSDN: 標準の数値書式指定文字列)

§2.1.1 整数のみに指定できる書式指定子

以下の書式指定子はint, long, byteなどの整数型の値に対して指定できます。

§2.1.1.1 D, d (decimal/10進数)

  • 数値を10進形式で表した文字列でフォーマットする。
    • 桁数が指定されている場合は、指定された桁数で0埋めされる。
書式指定子"D", "d"のフォーマット例
値と書式指定子 結果
(72).ToString("D") "72"
(72).ToString("D1") "72"
(72).ToString("D4") "0072"
(72).ToString("d4") "0072"
(-72).ToString("D") "-72"
(-72).ToString("D4") "-0072"

なお、ローカライズされた形式でフォーマットされるため、以下の例に挙げたカルチャ以外ではマイナス記号や空白などが挿入される位置が異なる場合がある点には注意が必要。

書式指定子"D", "d"とローカライズの例
値と書式指定子 結果
(-16).ToString("D4", CultureInfo.GetCultureInfo("ja-JP")) "-0016"
(-16).ToString("D4", CultureInfo.GetCultureInfo("en-US")) "-0016"
(-16).ToString("D4", CultureInfo.GetCultureInfo("fr-FR")) "-0016"
(-16).ToString("D4", CultureInfo.GetCultureInfo("es-ES")) "-0016"
(-16).ToString("D4", CultureInfo.InvariantCulture) "-0016"

§2.1.1.2 X, x (hexadecimal/16進数)

  • 数値を16進形式で表した文字列でフォーマットする。
    • 桁数が指定されている場合は、指定された桁数で0埋めされる。
書式指定子"X"のフォーマット例
値と書式指定子 結果
(42).ToString("X") "2A"
(42).ToString("X1") "2A"
(42).ToString("X4") "002A"
(-42).ToString("X") "FFFFFFD6"
(-42).ToString("X12") "0000FFFFFFD6"

小文字の"x"を指定した場合は、A-Fの代わりに小文字のa-fを使ってフォーマットされる。

書式指定子"x"のフォーマット例
値と書式指定子 結果
(42).ToString("x") "2a"
(42).ToString("x1") "2a"
(42).ToString("x4") "002a"
(-42).ToString("x") "ffffffd6"
(-42).ToString("x12") "0000ffffffd6"

§2.1.2 整数および実数に指定できる書式指定子

以下の書式指定子はint, double, decimalなどの整数型・実数型の値のどちらに対しても指定できます。

§2.1.2.1 F, f (fixed-point/固定小数点)

  • 数値を10進数の固定小数点形式で表した文字列でフォーマットする。
    • 桁数が指定されている場合は、小数部が指定された桁数で0埋めしてフォーマットされる。
    • 桁数が指定されていない場合は、小数部がデフォルトの桁数でフォーマットされる。
    • 小数部をフォーマットする際に、省略される部分は四捨五入してフォーマットされる。
書式指定子"F", "f"のフォーマット例
値と書式指定子 結果
(16).ToString("F") "16.00"
(16).ToString("F4") "16.0000"
(12345).ToString("F") "12345.00"
(3.1416).ToString("F") "3.14"
(3.1416).ToString("F3") "3.142"
(3.1416).ToString("f3") "3.142"
(-3.1416).ToString("F3") "-3.142"
(-3.1416).ToString("F6") "-3.141600"
(2.5).ToString("F0") "3"

非数と無限大の場合はそれぞれ次のようになる。

書式指定子"F"と非数・無限大のフォーマット例
値と書式指定子 結果
Double.NaN.ToString("F")) "NaN (非数値)"
Double.PositiveInfinity.ToString("F") "+∞"
Double.NegativeInfinity.ToString("F") "-∞"
Double.NaN.ToString("F4") "NaN (非数値)"
Double.PositiveInfinity.ToString("F4") "+∞"

また、小数点のピリオド、無限大記号、NaNの表記などはローカライズされた形式でフォーマットされる。

書式指定子"F", "f"とローカライズの例
値と書式指定子 結果
(-3.1416).ToString("F", CultureInfo.GetCultureInfo("ja-JP")) "-3.14"
(-3.1416).ToString("F", CultureInfo.GetCultureInfo("en-US")) "-3.14"
(-3.1416).ToString("F", CultureInfo.GetCultureInfo("fr-FR")) "-3,14"
(-3.1416).ToString("F", CultureInfo.GetCultureInfo("es-ES")) "-3,14"
(-3.1416).ToString("F", CultureInfo.InvariantCulture) "-3.14"
Double.NaN.ToString("F", CultureInfo.GetCultureInfo("ja-JP")) "NaN (非数値)"
Double.NaN.ToString("F", CultureInfo.GetCultureInfo("en-US")) "NaN"
Double.NaN.ToString("F", CultureInfo.GetCultureInfo("fr-FR")) "Non Numerique"
Double.NaN.ToString("F", CultureInfo.GetCultureInfo("es-ES")) "NeuN"
Double.NaN.ToString("F", CultureInfo.InvariantCulture) "NaN"
Double.PositiveInfinity.ToString("F", CultureInfo.GetCultureInfo("ja-JP")) "+∞"
Double.PositiveInfinity.ToString("F", CultureInfo.GetCultureInfo("en-US")) "Infinity"
Double.PositiveInfinity.ToString("F", CultureInfo.GetCultureInfo("fr-FR")) "+Infini"
Double.PositiveInfinity.ToString("F", CultureInfo.GetCultureInfo("es-ES")) "Infinito"
Double.PositiveInfinity.ToString("F", CultureInfo.InvariantCulture) "Infinity"
Double.NegativeInfinity.ToString("F", CultureInfo.GetCultureInfo("ja-JP")) "-∞"
Double.NegativeInfinity.ToString("F", CultureInfo.GetCultureInfo("en-US")) "-Infinity"
Double.NegativeInfinity.ToString("F", CultureInfo.GetCultureInfo("fr-FR")) "-Infini"
Double.NegativeInfinity.ToString("F", CultureInfo.GetCultureInfo("es-ES")) "-Infinito"
Double.NegativeInfinity.ToString("F", CultureInfo.InvariantCulture) "-Infinity"

§2.1.2.2 E, e (exponential/指数)

  • 数値を10進数の指数形式で表した文字列でフォーマットする。
    • 桁数が指定されている場合は、小数部が指定された桁数で0埋めしてフォーマットされる。
    • 桁数が指定されていない場合は、小数部がデフォルトの桁数でフォーマットされる。
    • 小数部をフォーマットする際に、省略される部分は四捨五入してフォーマットされる。
    • 小文字の"e"を指定した場合は、指数部の前の'E'の代わりに小文字の'e'を使ってフォーマットされる。
書式指定子"E", "e"のフォーマット例
値と書式指定子 結果
(16).ToString("E") "1.600000E+001"
(16).ToString("E2") "1.60E+001"
(12345).ToString("E2") "1.23E+004"
(0.9876).ToString("E2") "9.88E-001"
(3.1416).ToString("E") "3.141600E+000"
(3.1416).ToString("E3") "3.142E+000"
(3.1416).ToString("e3") "3.142e+000"
(-3.1416).ToString("E3") "-3.142E+000"
(-3.1416).ToString("E6") "-3.141600E+000"
(2.5).ToString("E0") "3E+000"

非数と無限大の場合はそれぞれ次のようになる。

書式指定子"E"と非数・無限大のフォーマット例
値と書式指定子 結果
Double.NaN.ToString("E")) "NaN (非数値)"
Double.PositiveInfinity.ToString("E") "+∞"
Double.NegativeInfinity.ToString("E") "-∞"
Double.NaN.ToString("E4") "NaN (非数値)"
Double.PositiveInfinity.ToString("E4") "+∞"

また、小数点のピリオド、無限大記号、NaNの表記などはローカライズされた形式でフォーマットされる。

書式指定子"E", "e"とローカライズの例
値と書式指定子 結果
(-3.1416).ToString("E", CultureInfo.GetCultureInfo("ja-JP")) "-3.141600E+000"
(-3.1416).ToString("E", CultureInfo.GetCultureInfo("en-US")) "-3.141600E+000"
(-3.1416).ToString("E", CultureInfo.GetCultureInfo("fr-FR")) "-3,141600E+000"
(-3.1416).ToString("E", CultureInfo.GetCultureInfo("es-ES")) "-3,141600E+000"
(-3.1416).ToString("E", CultureInfo.InvariantCulture) "-3.141600E+000"
Double.NaN.ToString("E", CultureInfo.GetCultureInfo("ja-JP")) "NaN (非数値)"
Double.NaN.ToString("E", CultureInfo.GetCultureInfo("en-US")) "NaN"
Double.NaN.ToString("E", CultureInfo.GetCultureInfo("fr-FR")) "Non Numerique"
Double.NaN.ToString("E", CultureInfo.GetCultureInfo("es-ES")) "NeuN"
Double.NaN.ToString("E", CultureInfo.InvariantCulture) "NaN"
Double.PositiveInfinity.ToString("E", CultureInfo.GetCultureInfo("ja-JP")) "+∞"
Double.PositiveInfinity.ToString("E", CultureInfo.GetCultureInfo("en-US")) "Infinity"
Double.PositiveInfinity.ToString("E", CultureInfo.GetCultureInfo("fr-FR")) "+Infini"
Double.PositiveInfinity.ToString("E", CultureInfo.GetCultureInfo("es-ES")) "Infinito"
Double.PositiveInfinity.ToString("E", CultureInfo.InvariantCulture) "Infinity"
Double.NegativeInfinity.ToString("E", CultureInfo.GetCultureInfo("ja-JP")) "-∞"
Double.NegativeInfinity.ToString("E", CultureInfo.GetCultureInfo("en-US")) "-Infinity"
Double.NegativeInfinity.ToString("E", CultureInfo.GetCultureInfo("fr-FR")) "-Infini"
Double.NegativeInfinity.ToString("E", CultureInfo.GetCultureInfo("es-ES")) "-Infinito"
Double.NegativeInfinity.ToString("E", CultureInfo.InvariantCulture) "-Infinity"

§2.1.2.3 P, p (percent/パーセント)

  • 数値をパーセント形式で表した文字列でフォーマットする。
    • 数値に100を乗じた値でフォーマットされ(1.0で100%となり)、位取りのカンマが挿入される。 数値が整数型の場合でも同様。
    • 桁数が指定されている場合は、小数部が指定された桁数で0埋めしてフォーマットされる。
    • 桁数が指定されていない場合は、小数部がデフォルトの桁数でフォーマットされる。
    • 小数部をフォーマットする際に、省略される部分は四捨五入してフォーマットされる。
書式指定子"P", "p"のフォーマット例
値と書式指定子 結果
(0.0).ToString("P") "0.00%"
(1.0).ToString("P") "100.00%"
(0.5).ToString("P1") "50.0%"
(-0.5).ToString("P4") "-50.0000%"
(72).ToString("P") "7,200.00%"
(0.0625).ToString("P1") "6.3%"

また、位取りのカンマ、小数点のピリオド、パーセント記号と挿入される空白などはローカライズされた形式でフォーマットされる。

書式指定子"P", "p"とローカライズの例
値と書式指定子 結果
(-1.0).ToString("P", CultureInfo.GetCultureInfo("ja-JP")) "-100.00%"
(-1.0).ToString("P", CultureInfo.GetCultureInfo("en-US")) "-100.00 %"
(-1.0).ToString("P", CultureInfo.GetCultureInfo("fr-FR")) "-100,00 %"
(-1.0).ToString("P", CultureInfo.GetCultureInfo("es-ES")) "-100,00%"
(-1.0).ToString("P", CultureInfo.InvariantCulture) "-100.00 %"

パーミル形式で表した文字列でフォーマットしたい場合は、カスタム数値書式指定子を使用する。

§2.1.2.4 N, n (number/数値)

  • 数値を10進数の固定小数点形式で表した文字列でフォーマットする。
    • 基本的には"F", "f"と同様だが、位取りのカンマが挿入される。
書式指定子"N", "n"のフォーマット例
値と書式指定子 結果
(12345).ToString("F")
(12345).ToString("N")
"12345.00"
"12,345.00"
(12345).ToString("F1")
(12345).ToString("N1")
"12345.0"
"12,345.0"

また、位取りのカンマ、小数点のピリオドなどはローカライズされた形式でフォーマットされる。

書式指定子"N", "n"とローカライズの例
値と書式指定子 結果
(-1234567.89).ToString("N", CultureInfo.GetCultureInfo("ja-JP")) "-1,234,567.89"
(-1234567.89).ToString("N", CultureInfo.GetCultureInfo("en-US")) "-1,234,567.89"
(-1234567.89).ToString("N", CultureInfo.GetCultureInfo("fr-FR")) "-1 234 567,89"
(-1234567.89).ToString("N", CultureInfo.GetCultureInfo("es-ES")) "-1.234.567,89"
(-1234567.89).ToString("N", CultureInfo.InvariantCulture) "-1,234,567.89"

§2.1.2.5 G, g (general/一般)

(未整理)

  • 数値を10進数で表した文字列でフォーマットする。 指数形式もしくは固定小数点形式のうち、より簡潔な形式でフォーマットされる。
    • 桁数を指定しない場合、数値の型によって適切な桁数が設定される(?)
    • 小文字の"g"を指定した場合は、指数部の前の'E'の代わりに小文字の'e'を使ってフォーマットされる。
書式指定子"G", "g"のフォーマット例
値と書式指定子 結果
byte.MaxValue.ToString("G") "255"
byte.MaxValue.ToString("G1") "3E+02"
int.MaxValue.ToString("G") "2147483647"
int.MaxValue.ToString("G8") "2.1474836E+09"
long.MaxValue.ToString("G") "9223372036854775807"
long.MaxValue.ToString("G12") "9.22337203685E+18"
(123456.78).ToString("G") "123456.78"
(123456.78).ToString("G4") "1.235E+05"
(123456.78).ToString("g4") "1.235e+05"

§2.1.2.6 C, c (currency/通貨)

  • 数値を通貨形式で表した文字列でフォーマットする。
    • 桁数が指定されている場合は、小数部が指定された桁数で0埋めしてフォーマットされる。
    • 桁数が指定されていない場合は、小数部がデフォルトの桁数でフォーマットされる。
    • 小数部をフォーマットする際に、省略される部分は四捨五入してフォーマットされる。
書式指定子"C", "c"のフォーマット例
値と書式指定子 結果
(72).ToString("C") "¥72"
(72).ToString("C2") "¥72.00"
(-16).ToString("C2") "-¥16.00"
(3.1416).ToString("C") "¥3"
(3.1416).ToString("C3") "¥3.142"

また、位取りのカンマ、小数点のピリオド、通貨単位記号と挿入される空白などはローカライズされた形式でフォーマットされる。

書式指定子"C", "c"とローカライズの例
値と書式指定子 結果
(-12345.67).ToString("C", CultureInfo.GetCultureInfo("ja-JP")) "-¥12,346"
(-12345.67).ToString("C", CultureInfo.GetCultureInfo("en-US")) "($12,345.67)"
(-12345.67).ToString("C", CultureInfo.GetCultureInfo("en-GB")) "-£12,345.67"
(-12345.67).ToString("C", CultureInfo.GetCultureInfo("fr-FR")) "-12 345,67 €"
(-12345.67).ToString("C", CultureInfo.GetCultureInfo("es-ES")) "-12.345,67 €"
(-12345.67).ToString("C", CultureInfo.InvariantCulture) "(¤12,345.67)"

§2.1.3 SingleおよびDoubleのみに指定できる書式指定子

以下の書式指定子はfloat(Single), doubleの浮動小数点型(.NET Framework 4以降ではBigIntegerも含む)の値に対してのみ指定できます。

§2.1.3.1 R, r (round-trip/ラウンドトリップ)

  • 丸めを行わず、誤差なく復元できる形式でフォーマットする。
書式指定子"R", "r"のフォーマット例
値と書式指定子 結果
(2.0/3.0).ToString()
(2.0/3.0).ToString("R")
"0.666666666666667"
"0.66666666666666663"
(1.0f/3.0f).ToString()
(1.0f/3.0f).ToString("R")
"0.3333333"
"0.333333343"

桁数は指定しても無視される。

書式指定子"R", "r"で桁数を指定した場合のフォーマット例
値と書式指定子 結果
(2.0/3.0).ToString("R4") "0.66666666666666663"
(1.0f/3.0f).ToString("R4") "0.333333343"

なお、小数点のピリオドなどはローカライズされた形式でフォーマットされる点には注意が必要。

書式指定子"R", "r"とローカライズの例
値と書式指定子 結果
(2.0/3.0).ToString("R", CultureInfo.GetCultureInfo("ja-JP")) "0.66666666666666663"
(2.0/3.0).ToString("R", CultureInfo.GetCultureInfo("en-US")) "0.66666666666666663"
(2.0/3.0).ToString("R", CultureInfo.GetCultureInfo("fr-FR")) "0,66666666666666663"
(2.0/3.0).ToString("R", CultureInfo.GetCultureInfo("es-ES")) "0,66666666666666663"
(2.0/3.0).ToString("R", CultureInfo.InvariantCulture) "0.66666666666666663"
(2.0f/3.0f).ToString("R", CultureInfo.GetCultureInfo("ja-JP")) "0.6666667"
(2.0f/3.0f).ToString("R", CultureInfo.GetCultureInfo("en-US")) "0.6666667"
(2.0f/3.0f).ToString("R", CultureInfo.GetCultureInfo("fr-FR")) "0,6666667"
(2.0f/3.0f).ToString("R", CultureInfo.GetCultureInfo("es-ES")) "0,6666667"
(2.0f/3.0f).ToString("R", CultureInfo.InvariantCulture) "0.6666667"

§2.2 日付と時刻の書式指定子

以下の書式指定子はDateTimeまたはDateTimeOffsetの日付型の値に対して指定できます。 (MSDN: 標準の日付と時刻の書式指定文字列)

書式指定子によっては、日時をUTCに変換した上でフォーマットされるものが存在します。 DateTime・DateTimeOffsetと時刻の種類の扱い・時刻の変換については時刻の種類・UTCとの時差・タイムゾーン間の変換をご覧ください。

§2.2.1 ローカライズされない書式指定子

以下の書式指定子はローカライズされていない(カルチャに依存しない)形式でフォーマットされます。

§2.2.1.1 R, r (RFC1123)

  • HTTPなどで用いられるRFC1123形式でフォーマットする。
    • UTCとしてフォーマットされるが、DateTime型の場合はフォーマットの際にUTCへの変換は行われないので、ToUniversalTimeメソッドを使ってUTCに変換しておく必要がある。

§2.2.1.2 O, o (round-trip date/time)

  • XMLなどで用いられるW3C-DTF(W3C Date and Time Formats, ISO8601)形式でフォーマットする。
    • 秒の端数はTicks(100ナノ秒)の精度でフォーマットされる。

§2.2.1.3 s (sortable date/time)

  • ソートに適した形式でフォーマットする。
    • W3C-DTF形式に似ているが、秒の端数はフォーマットされない。 また、タイムゾーンのオフセット値もフォーマットされない。

§2.2.1.4 u (universal sortable date/time)

  • "s"と同様、ソートに適した形式でフォーマットする。
    • "s"とは異なり、UTCとしてフォーマットされ(最後に'Z'が付く)、日付と時刻の間は'T'ではなく空白になる。
    • UTCとしてフォーマットされるが、DateTime型の場合はフォーマットの際にUTCへの変換は行われないので、ToUniversalTimeメソッドを使ってUTCに変換しておく必要がある。

§2.2.1.5 フォーマット例

書式指定子"r", "o", "s", "u"とDateTime型のフォーマット例
値と書式指定子 結果
DateTime.Now.ToString()
DateTime.UtcNow.ToString()
"2010/09/14 1:02:03"
"2010/09/13 16:02:03"
DateTime.Now.ToString("r")
DateTime.UtcNow.ToString("r")
"Tue, 14 Sep 2010 01:02:03 GMT"
"Mon, 13 Sep 2010 16:02:03 GMT"
DateTime.Now.ToString("o")
DateTime.UtcNow.ToString("o")
"2010-09-14T01:02:03.1234567+09:00"
"2010-09-13T16:02:03.1234567Z"
DateTime.Now.ToString("s")
DateTime.UtcNow.ToString("s")
"2010-09-14T01:02:03"
"2010-09-13T16:02:03"
DateTime.Now.ToString("u")
DateTime.UtcNow.ToString("u")
"2010-09-14 01:02:03Z"
"2010-09-13 16:02:03Z"
書式指定子"r", "o", "s", "u"とDateTimeOffset型のフォーマット例
値と書式指定子 結果
DateTimeOffset.Now.ToString()
DateTimeOffset.UtcNow.ToString()
"2010/09/14 1:02:03 +09:00"
"2010/09/13 16:02:03 +00:00"
DateTimeOffset.Now.ToString("r")
DateTimeOffset.UtcNow.ToString("r")
"Mon, 13 Sep 2010 16:02:03 GMT"
"Mon, 13 Sep 2010 16:02:03 GMT"
DateTimeOffset.Now.ToString("o")
DateTimeOffset.UtcNow.ToString("o")
"2010-09-14T01:02:03.1234567+09:00"
"2010-09-13T16:02:03.1234567+00:00"
DateTimeOffset.Now.ToString("s")
DateTimeOffset.UtcNow.ToString("s")
"2010-09-14T01:02:03"
"2010-09-13T16:02:03"
DateTimeOffset.Now.ToString("u")
DateTimeOffset.UtcNow.ToString("u")
"2010-09-13 16:02:03Z"
"2010-09-13 16:02:03Z"

§2.2.2 ローカライズされる書式指定子

以下の書式指定子はローカライズされた形式でフォーマットされます。

§2.2.2.1 D, d (date)

  • 日付のみ(年月日)の形式でフォーマットする。
    • "D"の場合は長い形式、"d"の場合は短い形式でフォーマットされる。
    • ToLongDateString(), ToShortDateString()でも同じ結果が得られる。
書式指定子"D", "d"のフォーマット例
値と書式指定子 結果
DateTime.Now.ToString("D")
DateTime.Now.ToLongDateString()
"2010年9月14日"
DateTime.Now.ToString("d")
DateTime.Now.ToShortDateString()
"2010/09/14"
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo("ja-JP")) "2010年9月14日"
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo("en-US")) "Tuesday, September 14, 2010"
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo("es-ES")) "martes, 14 de septiembre de 2010"
DateTime.Now.ToString("D", CultureInfo.InvariantCulture) "Tuesday, 14 September 2010"
DateTime.Now.ToString("d", CultureInfo.GetCultureInfo("ja-JP")) "2010/09/14"
DateTime.Now.ToString("d", CultureInfo.GetCultureInfo("en-US")) "9/14/2010"
DateTime.Now.ToString("d", CultureInfo.GetCultureInfo("es-ES")) "14/09/2010"
DateTime.Now.ToString("d", CultureInfo.InvariantCulture) "09/14/2010"

§2.2.2.2 T, t (time)

  • 時刻のみ(時分秒)の形式でフォーマットする。
    • "T"の場合は長い形式、"t"の場合は短い形式でフォーマットされる。
    • ToLongTimeString(), ToShortTimeString()でも同じ結果が得られる。
書式指定子"T", "t"のフォーマット例
値と書式指定子 結果
DateTime.Now.ToString("T")
DateTime.Now.ToLongTimeString()
"1:02:03"
DateTime.Now.ToString("t")
DateTime.Now.ToShortTimeString()
"1:02"
DateTime.Now.ToString("T", CultureInfo.GetCultureInfo("ja-JP")) "1:02:03"
DateTime.Now.ToString("T", CultureInfo.GetCultureInfo("en-US")) "1:02:03 AM"
DateTime.Now.ToString("T", CultureInfo.GetCultureInfo("es-ES")) "1:02:03"
DateTime.Now.ToString("T", CultureInfo.InvariantCulture) "01:02:03"
DateTime.Now.ToString("t", CultureInfo.GetCultureInfo("ja-JP")) "1:02"
DateTime.Now.ToString("t", CultureInfo.GetCultureInfo("en-US")) "1:02 AM"
DateTime.Now.ToString("t", CultureInfo.GetCultureInfo("es-ES")) "1:02"
DateTime.Now.ToString("t", CultureInfo.InvariantCulture) "01:02"

§2.2.2.3 Y, y (year/month)

  • 年月のみの形式でフォーマットする。
書式指定子"Y", "y"のフォーマット例
値と書式指定子 結果
DateTime.Now.ToString("Y") "2010年9月"
DateTime.Now.ToString("y") "2010年9月"
DateTime.Now.ToString("Y", CultureInfo.GetCultureInfo("ja-JP")) "2010年9月"
DateTime.Now.ToString("Y", CultureInfo.GetCultureInfo("en-US")) "September, 2010"
DateTime.Now.ToString("Y", CultureInfo.GetCultureInfo("es-ES")) "septiembre de 2010"
DateTime.Now.ToString("Y", CultureInfo.InvariantCulture) "2010 September"

§2.2.2.4 M, m (month/day)

  • 月日のみの形式でフォーマットする。
書式指定子"M", "m"のフォーマット例
値と書式指定子 結果
DateTime.Now.ToString("M") "9月14日"
DateTime.Now.ToString("m") "9月14日"
DateTime.Now.ToString("M", CultureInfo.GetCultureInfo("ja-JP")) "9月14日"
DateTime.Now.ToString("M", CultureInfo.GetCultureInfo("en-US")) "September 14"
DateTime.Now.ToString("M", CultureInfo.GetCultureInfo("es-ES")) "14 septiembre"
DateTime.Now.ToString("M", CultureInfo.InvariantCulture) "September 14"

§2.2.2.5 F, f (full date/time)

  • 完全な日付と時刻の形式でフォーマットする。
    • "F"の場合は長い形式、"f"の場合は短い形式でフォーマットされる。
    • "f"は"D"(長い形式の日付)と"t"(短い形式の時刻)を繋げた形式となる。
書式指定子"F", "f"のフォーマット例
値と書式指定子 結果
DateTime.Now.ToString("F") "2010年9月14日 1:02:03"
DateTime.Now.ToString("f") "2010年9月14日 1:02"
DateTime.Now.ToString("F", CultureInfo.GetCultureInfo("ja-JP")) "2010年9月14日 1:02:03"
DateTime.Now.ToString("F", CultureInfo.GetCultureInfo("en-US")) "Tuesday, September 14, 2010 1:02:03 AM"
DateTime.Now.ToString("F", CultureInfo.GetCultureInfo("es-ES")) "martes, 14 de septiembre de 2010 1:02:03"
DateTime.Now.ToString("F", CultureInfo.InvariantCulture) "Tuesday, 14 September 2010 01:02:03"
DateTime.Now.ToString("f", CultureInfo.GetCultureInfo("ja-JP")) "2010年9月14日 1:02:03"
DateTime.Now.ToString("f", CultureInfo.GetCultureInfo("en-US")) "Tuesday, September 14, 2010 1:02 AM"
DateTime.Now.ToString("f", CultureInfo.GetCultureInfo("es-ES")) "martes, 14 de septiembre de 2010 1:02"
DateTime.Now.ToString("f", CultureInfo.InvariantCulture) "Tuesday, 14 September 2010 01:02"

§2.2.2.6 G, g (general date/time)

  • 一般的な日付と時刻の形式でフォーマットする。
    • "G"の場合は長い形式、"g"の場合は短い形式でフォーマットされる。
    • "g"は"d"(短い形式の日付)と"t"(短い形式の時刻)を繋げた形式となる。
書式指定子"G", "g"のフォーマット例
値と書式指定子 結果
DateTime.Now.ToString("G") "2010/09/14 1:02:03"
DateTime.Now.ToString("g") "2010/09/14 1:02"
DateTime.Now.ToString("G", CultureInfo.GetCultureInfo("ja-JP")) "2010/09/14 1:02:03"
DateTime.Now.ToString("G", CultureInfo.GetCultureInfo("en-US")) "9/14/2010 1:02:03 AM"
DateTime.Now.ToString("G", CultureInfo.GetCultureInfo("es-ES")) "14/09/2010 1:02:03"
DateTime.Now.ToString("G", CultureInfo.InvariantCulture) "09/14/2010 01:02:03"
DateTime.Now.ToString("g", CultureInfo.GetCultureInfo("ja-JP")) "2010/09/14 1:02"
DateTime.Now.ToString("g", CultureInfo.GetCultureInfo("en-US")) "9/14/2010 1:02 AM"
DateTime.Now.ToString("g", CultureInfo.GetCultureInfo("es-ES")) "14/09/2010 1:02"
DateTime.Now.ToString("g", CultureInfo.InvariantCulture) "09/14/2010 01:02"

§2.2.2.7 U (universal full date/time)

  • UTCでの完全な日付と日時の形式でフォーマットする。
    • 値がDateTime型の場合は自動的にUTCに変換され、"F"と同じ形式でフォーマットされる。
    • DateTimeOffset型の値ではサポートされない(FormatExceptionがスローされる)。
書式指定子"U"のフォーマット例
値と書式指定子 結果
DateTime.Now.ToString("F") "2010年9月14日 1:02:03"
DateTime.Now.ToString("U") "2010年9月13日 16:02:03"
DateTime.Now.ToString("U", CultureInfo.GetCultureInfo("ja-JP")) "2010年9月13日 16:02:03"
DateTime.Now.ToString("U", CultureInfo.GetCultureInfo("en-US")) "Monday, September 13, 2010 4:02:03 PM"
DateTime.Now.ToString("U", CultureInfo.GetCultureInfo("es-ES")) "lunes, 13 de septiembre de 2010 16:02:03"
DateTime.Now.ToString("U", CultureInfo.InvariantCulture) "Monday, 13 September 2010 16:02:03"

§2.3 列挙型の書式指定子

以下の書式指定子は列挙型の値に対して指定できます。 (MSDN: 列挙型書式指定文字列)

§2.3.1 D, d (decimal)

  • 列挙型の値を10進形式でフォーマットする。
    • Flags属性が付与されているかどうかに関わらず、常に10進形式の値でフォーマットされる。
書式指定子"D", "d"のフォーマット例
値と書式指定子 結果
DayOfWeek.Sunday.ToString("D") "0"
DayOfWeek.Sunday.ToString("d") "0"
DayOfWeek.Wednesday.ToString("D") "3"
FileAttributes.Archive.ToString("D") "32"
FileAttributes.ReadOnly.ToString("d") "1"
(FileAttributes.Archive | FileAttributes.ReadOnly).ToString("d") "33"

§2.3.2 X, x (hexadecimal)

  • 列挙型の値を16進形式でフォーマットする。
    • Flags属性が付与されているかどうかに関わらず、常に16進形式の値でフォーマットされる。
    • 小文字の"x"を指定した場合は、A-Fの代わりに小文字のa-fを使ってフォーマットされる。
書式指定子"X", "x"のフォーマット例
値と書式指定子 結果
DayOfWeek.Sunday.ToString("X") "00000000"
DayOfWeek.Wednesday.ToString("X") "00000003"
FileAttributes.Archive.ToString("X") "00000020"
FileAttributes.ReadOnly.ToString("X") "00000001"
(FileAttributes.Archive | FileAttributes.Normal).ToString("X") "000000a0"
(FileAttributes.Archive | FileAttributes.Normal).ToString("x") "000000A0"

また、基になる型に応じて適切な桁数で0埋めされてフォーマットされる。

書式指定子Xと列挙型の基底型による出力桁数の違い
using System;

enum ByteEnum : byte {
  E1 = 0x0f,
}

enum ShortEnum : short {
  E1 = 0x00ff,
}

enum IntEnum : int {
  E1 = 0x0000ffff,
}

enum LongEnum : long {
  E1 = 0x00000000ffffffff,
}

class Sample {
  static void Main()
  {
    Console.WriteLine(ByteEnum.E1.ToString("X"));   // 0F
    Console.WriteLine(ShortEnum.E1.ToString("X"));  // 00FF
    Console.WriteLine(IntEnum.E1.ToString("X"));    // 0000FFFF
    Console.WriteLine(LongEnum.E1.ToString("X"));   // 00000000FFFFFFFF
  }
}

§2.3.3 G, g (general)

  • 列挙型の値を文字列(メンバ名)でフォーマットする。
    • FlagsAttributeが適用されている列挙型の場合、有効な値の組み合わせをカンマ区切りの文字列でフォーマットされる。
    • FlagsAttributeが適用されていない列挙型の場合、文字列で表現できない場合は、数値(Dと同じ)でフォーマットされる。

§2.3.4 F, f (flag)

  • 列挙型の値を文字列(メンバ名)でフォーマットする。
    • "G", "g"と異なり、FlagsAttributeが付与されていない列挙型の場合でも、有効な値の組み合わせをカンマ区切りの文字列でフォーマットされる。
書式指定子"G", "g", "F", "f"のフォーマット例
値と書式指定子 結果
(DayOfWeek.Wednesday | DayOfWeek.Saturday).ToString("G") "7"
(DayOfWeek.Wednesday | DayOfWeek.Saturday).ToString("F") "Monday, Saturday"
(FileAttributes.Archive | FileAttributes.ReadOnly).ToString("G") "ReadOnly, Archive"
(FileAttributes.Archive | FileAttributes.ReadOnly).ToString("F") "ReadOnly, Archive"
(FileAttributes.Archive | FileAttributes.ReadOnly).ToString("g") "ReadOnly, Archive"
(FileAttributes.Archive | FileAttributes.ReadOnly).ToString("f") "ReadOnly, Archive"
((DayOfWeek)0x7fffffff).ToString("G") "2147483647"
((DayOfWeek)0x7fffffff).ToString("F") "2147483647"
((FileAttributes)0x7fffffff).ToString("G") "2147483647"
((FileAttributes)0x7fffffff).ToString("F") "2147483647"

§2.4 時間間隔の書式指定子

.NET Framework 4以降では、TimeSpan型の値についても書式指定子を使ってフォーマットできるようになっています。 以下の書式指定子はTimeSpan型の値に対して指定できます。 (MSDN: 標準の時間間隔書式指定文字列)

§2.4.1 c (constant)

  • 固定の形式でフォーマットする。
    • 時分秒は常にhh:mm:ssの形式で0埋めされてフォーマットされ、ミリ秒および日数は0でない場合にフォーマットされる。
    • 時分秒区切りのコロン、小数点のピリオドなどはローカライズされずにフォーマットされる。
書式指定子"C", "c"のフォーマット例
値と書式指定子 結果
TimeSpan.Zero.ToString("c") "00:00:00"
TimeSpan.Zero.ToString("C") "00:00:00"
(new TimeSpan(1, 2, 3)).ToString("c") "01:02:03"
TimeSpan.FromHours(-36).ToString("c") "-1.12:00:00"
TimeSpan.FromDays(1.234).ToString("c") "1.05:36:57.6000000"

§2.4.2 G, g (general)

  • 一般的な形式でフォーマットする。
    • "G"の場合は"d:hh:mm:ss:fffffff"(時分秒すべて0埋め2桁、秒の端数は0埋め7桁)の形式、"g"の場合は"[d.]h:mm:ss[.FFFFFFF]"(分秒は0埋め2桁、時は0埋めなし、秒の端数と日数は0でない場合のみ出力)の形式でフォーマットされる。
    • 時分秒区切りのコロン、小数点のピリオドなどはローカライズされた形式でフォーマットされる。
書式指定子"G", "g"のフォーマット例
値と書式指定子 結果
(new TimeSpan(1, 2, 3)).ToString("g") "1:2:03"
(new TimeSpan(1, 2, 3)).ToString("G") "0:01:02:03.0000000"
(new TimeSpan(-1, -2, -3, -4, -567)).ToString("g") "-1:2:03:04.567"
(new TimeSpan(-1, -2, -3, -4, -567)).ToString("G") "-1:02:03:04.5670000"
(new TimeSpan(-1, -2, -3, -4, -567)).ToString("g", CultureInfo.GetCultureInfo("ja-JP")) "-1:2:03:04.567"
(new TimeSpan(-1, -2, -3, -4, -567)).ToString("g", CultureInfo.GetCultureInfo("en-US")) "-1:2:03:04.567"
(new TimeSpan(-1, -2, -3, -4, -567)).ToString("g", CultureInfo.GetCultureInfo("fr-FR")) "-1:2:03:04,567"
(new TimeSpan(-1, -2, -3, -4, -567)).ToString("g", CultureInfo.InvariantCulture) "-1:2:03:04.567"
(new TimeSpan(-1, -2, -3, -4, -567)).ToString("G", CultureInfo.GetCultureInfo("ja-JP")) "-1:02:03:04.5670000"
(new TimeSpan(-1, -2, -3, -4, -567)).ToString("G", CultureInfo.GetCultureInfo("en-US")) "-1:02:03:04.5670000"
(new TimeSpan(-1, -2, -3, -4, -567)).ToString("G", CultureInfo.GetCultureInfo("fr-FR")) "-1:02:03:04,5670000"
(new TimeSpan(-1, -2, -3, -4, -567)).ToString("G", CultureInfo.InvariantCulture) "-1:02:03:04.5670000"

§3 カスタム書式指定子

このセクションは未整理です。

§3.1 数値のカスタム書式指定子

(MSDN: カスタム数値書式指定文字列)

数値のカスタム書式指定子とフォーマット例
値と書式指定子 結果
(72).ToString("##.0") "72.0"
(72).ToString("0000.0") "0072.0"
(72).ToString("0000.#") "0072"
(3.1416).ToString("0000.0") "0003.1"
(3.1416).ToString("0000.0", CultureInfo.GetCultureInfo("fr-FR")) "0003,1"
(3.1416).ToString("0000.0", CultureInfo.InvariantCulture) "0003.1"
(123456789).ToString("#,###") "123,456,789"
(123456789).ToString("#,###", CultureInfo.GetCultureInfo("fr-FR")) "123 456 789"
(123456789).ToString("#,###", CultureInfo.InvariantCulture) "123,456,789"
(1234567).ToString("##.#e+0") "12.3e+5"

§3.1.1 パーセント・パーミル

書式指定子に"%"および"‰"を指定すると、それぞれパーセント・パーミルとしてフォーマットされます(数値に100ないし1000を乗じた値でフォーマットされる)。

数値のカスタム書式指定子とフォーマット例
値と書式指定子 結果
(0.5).ToString("#.0%") "50.0%"
(0.5).ToString("#.0‰") "500.0‰"

§3.2 日付と時刻のカスタム書式指定子

(MSDN: カスタムの日付と時刻の書式指定文字列)

日付と時刻のカスタム書式指定子とフォーマット例
値と書式指定子 結果
DateTime.Now.ToString("y/M/d h:m:s") "10/9/14 1:2:3"
DateTime.Now.ToString("yy/MM/dd hh:mm:ss") "10/09/14 01:02:03"
DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz") "2010-09-14T01:02:03.456789+09:00"
DateTime.Now.ToString("yyyy/MM/dd (dddd) hh:mm:ss") "2010/09/14 (火曜日) 01:02:03"
DateTime.Now.ToString("yyyy/MM/dd (dddd) hh:mm:ss", CultureInfo.GetCultureInfo("en-US")) "2010/09/14 (Tuesday) 01:02:03"
DateTime.Now.ToString("yyyy/MM/dd (dddd) hh:mm:ss", CultureInfo.InvariantCulture) "2010/09/14 (Tuesday) 01:02:03"
DateTime.Now.ToString("ddd, d MMM yyyy HH:mm:ss K") "火, 14 9 2010 01:02:03 +09:00"
DateTime.Now.ToString("ddd, d MMM yyyy HH:mm:ss K", CultureInfo.GetCultureInfo("en-US")) "Tue, 14 Sep 2010 01:02:03 +09:00"
DateTime.Now.ToString("ddd, d MMM yyyy HH:mm:ss K", CultureInfo.InvariantCulture) "Tue, 14 Sep 2010 01:02:03 +09:00"
DateTime.UtcNow.ToString("ddd, d MMM yyyy HH:mm:ss K") "月, 13 9 2010 16:02:03 Z"
DateTime.UtcNow.ToString("ddd, d MMM yyyy HH:mm:ss K", CultureInfo.GetCultureInfo("en-US")) "Mon, 13 Sep 2010 16:02:03 Z"
DateTime.UtcNow.ToString("ddd, d MMM yyyy HH:mm:ss K", CultureInfo.InvariantCulture) "Mon, 13 Sep 2010 16:02:03 Z"

1文字だけからなる書式指定子は標準の書式指定子を表すものとして扱われるため、カスタム書式指定子として指定したい場合は"%"を前置する必要があります。 なお、前後どちらかにスペースを挿入することでもカスタム書式指定子として指定することができます。

1文字だけからなるカスタム書式指定子とフォーマット例
値と書式指定子 結果 使用される書式
DateTime.Now.ToString("d") "2010/09/14" 短い形式の日付
DateTime.Now.ToString("%d") "14" 0埋めなしの日にち
DateTime.Now.ToString(" d") " 14" 空白が前置された0埋めなしの日にち
DateTime.Now.ToString("d ") "14 " 空白が後置された0埋めなしの日にち

また、カスタム書式指定子としての日付の区切り記号"/"および時刻の区切り記号":"はローカライズされた形式でフォーマットされます。 ローカライズされないようにするには、エスケープ文字"\"を前置します。

日付と時刻の区切り記号を表すカスタム書式指定子とフォーマット例
値と書式指定子 結果
DateTime.Now.ToString("yy/MM/dd hh:mm:ss") "10/09/14 01:02:03"
DateTime.Now.ToString("yy/MM/dd hh:mm:ss", CultureInfo.InvariantCulture) "10/09/14 01:02:03"
DateTime.Now.ToString("yy/MM/dd hh:mm:ss", CultureInfo.GetCultureInfo("it-IT")) "10/09/14 01.02.03"
DateTime.Now.ToString("yy/MM/dd hh:mm:ss", CultureInfo.GetCultureInfo("ar-DZ")) "10-09-14 01:02:03"
DateTime.Now.ToString(@"yy\/MM\/dd hh\:mm\:ss", CultureInfo.GetCultureInfo("it-IT")) "10/09/14 01:02:03"
DateTime.Now.ToString(@"yy\/MM\/dd hh\:mm\:ss", CultureInfo.GetCultureInfo("ar-DZ")) "10/09/14 01:02:03"

§3.3 時間間隔のカスタム書式指定子

(MSDN: カスタム時間間隔書式指定文字列)

時間間隔のカスタム書式指定子とフォーマット例
値と書式指定子 結果
(new TimeSpan(1, 2, 3)).ToString(@"%h\-m\-s") "1-2-3"
(new TimeSpan(1, 2, 3)).ToString(@"hh\-mm\-ss") "01-02-03"
TimeSpan.FromDays(10.0/7.0).ToString(@"dd\.hh\:mm\:ss\.FFFF") "01.10:17:08.571"
TimeSpan.FromDays(10.0/7.0).ToString(@"dd\.hh\:mm\:ss\.ffff") "01.10:17:08.0571"