ToStringメソッドでは、書式に加えて引数に書式プロバイダと呼ばれるものを指定できます。 書式プロバイダとは、書式指定子からそれにに対応する形式の文字列に変換するためのものです。 その一例としてCultureInfoクラスは書式プロバイダとして機能します。 このため、CultureInfoをToStringメソッドの引数に指定することにより、特定カルチャでの形式に従ってDateTime・DateTimeOffsetを文字列化することができます。

次の例では、書式指定子として一般的な日付と日時の形式Gを指定し、書式プロバイダにはen-US(英語/アメリカ合衆国)、de-DE(ドイツ語/ドイツ)、ja-JP(日本語/日本)をそれぞれ指定し、その結果の違いを表示しています。

CultureInfoを書式プロバイダとして指定してDateTimeを文字列に変換する
using System;
using System.Globalization;

class Sample {
  static void Main()
  {
    // 書式プロバイダとして使用するカルチャ
    var enus = new CultureInfo("en-US");
    var dede = new CultureInfo("de-DE");
    var jajp = new CultureInfo("ja-JP");

    var dt = DateTime.Now;

    Console.WriteLine(dt.ToString("G", enus));  // en-USでの一般的な日付と日時の形式で文字列化
    Console.WriteLine(dt.ToString("G", dede));  // de-DEでの一般的な日付と日時の形式で文字列化
    Console.WriteLine(dt.ToString("G", jajp));  // ja-JPでの一般的な日付と日時の形式で文字列化
    Console.WriteLine(dt.ToString("G"));        // デフォルトの一般的な日付と日時の形式で文字列化
  }
}
ja-JPでの実行結果例
4/1/2013 3:00:30 PM
01.04.2013 15:00:30
2013/04/01 15:00:30
2013/04/01 15:00:30

このように、カルチャによって「一般的な日付と日時の形式」として定義されている書式には違いがあるため、同じ書式指定子でもカルチャによって異なる文字列が返されます。 書式プロバイダを指定しなかった場合(省略した場合およびnull/Nothingを指定した場合)は、現在のスレッドに設定されているカルチャが書式プロバイダとして使用されます。

また、既に解説したとおり、書式にはローカライズされるものとそうでないものが存在します。 上記の例で使用した一般的な日付と日時の形式Gはローカライズされる書式ですが、ISO8601(W3C-DTF)形式oやRFC1123形式rなどはローカライズされない書式であるため、異なるカルチャを書式プロバイダとして指定しても得られる結果は常に同じとなります。

書式と書式プロバイダについては文字列と書式、カルチャと書式についてカルチャの基本・種類・カルチャ情報の取得およびカルチャと書式・テキスト処理・暦でより詳しく解説しているので、合わせてご覧ください。