DateTimeFormatInfo クラス

定義

日付と時刻の値の書式に関するカルチャ固有の情報を提供します。

public ref class DateTimeFormatInfo sealed : IFormatProvider
public ref class DateTimeFormatInfo sealed : ICloneable, IFormatProvider
public ref class DateTimeFormatInfo sealed : ICloneable, IFormatProvider, System::Runtime::Serialization::ISerializable
public sealed class DateTimeFormatInfo : IFormatProvider
public sealed class DateTimeFormatInfo : ICloneable, IFormatProvider
[System.Serializable]
public sealed class DateTimeFormatInfo : ICloneable, IFormatProvider, System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class DateTimeFormatInfo : ICloneable, IFormatProvider
type DateTimeFormatInfo = class
    interface IFormatProvider
type DateTimeFormatInfo = class
    interface ICloneable
    interface IFormatProvider
[<System.Serializable>]
type DateTimeFormatInfo = class
    interface ICloneable
    interface IFormatProvider
    interface ISerializable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type DateTimeFormatInfo = class
    interface ICloneable
    interface IFormatProvider
Public NotInheritable Class DateTimeFormatInfo
Implements IFormatProvider
Public NotInheritable Class DateTimeFormatInfo
Implements ICloneable, IFormatProvider
Public NotInheritable Class DateTimeFormatInfo
Implements ICloneable, IFormatProvider, ISerializable
継承
DateTimeFormatInfo
属性
実装

次の例では、リフレクションを使用して、英語 (米国) カルチャのオブジェクトのDateTimeFormatInfoプロパティを取得します。 カスタム書式指定文字列を含むプロパティの値が表示され、それらの文字列を使用して書式設定された日付が表示されます。

using System;
using System.Globalization;
using System.Reflection;

public class Example
{
   public static void Main()
   {
      // Get the properties of an en-US DateTimeFormatInfo object.
      DateTimeFormatInfo dtfi = CultureInfo.GetCultureInfo("en-US").DateTimeFormat;
      Type typ = dtfi.GetType();
      PropertyInfo[] props = typ.GetProperties();
      DateTime value = new DateTime(2012, 5, 28, 11, 35, 0);

      foreach (var prop in props) {
         // Is this a format pattern-related property?
         if (prop.Name.Contains("Pattern")) {
            string fmt = prop.GetValue(dtfi, null).ToString();
            Console.WriteLine("{0,-33} {1} \n{2,-37}Example: {3}\n",
                              prop.Name + ":", fmt, "",
                              value.ToString(fmt));
         }
      }
   }
}
// The example displays the following output:
//    FullDateTimePattern:              dddd, MMMM dd, yyyy h:mm:ss tt
//                                         Example: Monday, May 28, 2012 11:35:00 AM
//
//    LongDatePattern:                  dddd, MMMM dd, yyyy
//                                         Example: Monday, May 28, 2012
//
//    LongTimePattern:                  h:mm:ss tt
//                                         Example: 11:35:00 AM
//
//    MonthDayPattern:                  MMMM dd
//                                         Example: May 28
//
//    RFC1123Pattern:                   ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
//                                         Example: Mon, 28 May 2012 11:35:00 GMT
//
//    ShortDatePattern:                 M/d/yyyy
//                                         Example: 5/28/2012
//
//    ShortTimePattern:                 h:mm tt
//                                         Example: 11:35 AM
//
//    SortableDateTimePattern:          yyyy'-'MM'-'dd'T'HH':'mm':'ss
//                                         Example: 2012-05-28T11:35:00
//
//    UniversalSortableDateTimePattern: yyyy'-'MM'-'dd HH':'mm':'ss'Z'
//                                         Example: 2012-05-28 11:35:00Z
//
//    YearMonthPattern:                 MMMM, yyyy
//                                         Example: May, 2012
Imports System.Globalization
Imports System.Reflection

Module Example
   Public Sub Main()
      ' Get the properties of an en-US DateTimeFormatInfo object.
      Dim dtfi As DateTimeFormatInfo = CultureInfo.GetCultureInfo("en-US").DateTimeFormat
      Dim typ As Type = dtfi.GetType()
      Dim props() As PropertyInfo = typ.GetProperties()
      Dim value As Date = #05/28/2012 11:35AM# 
      
      For Each prop In props
         ' Is this a format pattern-related property?
         If prop.Name.Contains("Pattern") Then
            Dim fmt As String = CStr(prop.GetValue(dtfi, Nothing))
            Console.WriteLine("{0,-33} {1} {2}{3,-37}Example: {4}", 
                              prop.Name + ":", fmt, vbCrLf, "",
                              value.ToString(fmt)) 
            Console.WriteLine()
         End If
      Next
   End Sub
End Module
' The example displays the following output:
'    FullDateTimePattern:              dddd, MMMM dd, yyyy h:mm:ss tt
'                                         Example: Monday, May 28, 2012 11:35:00 AM
'    
'    LongDatePattern:                  dddd, MMMM dd, yyyy
'                                         Example: Monday, May 28, 2012
'    
'    LongTimePattern:                  h:mm:ss tt
'                                         Example: 11:35:00 AM
'    
'    MonthDayPattern:                  MMMM dd
'                                         Example: May 28
'    
'    RFC1123Pattern:                   ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
'                                         Example: Mon, 28 May 2012 11:35:00 GMT
'    
'    ShortDatePattern:                 M/d/yyyy
'                                         Example: 5/28/2012
'    
'    ShortTimePattern:                 h:mm tt
'                                         Example: 11:35 AM
'    
'    SortableDateTimePattern:          yyyy'-'MM'-'dd'T'HH':'mm':'ss
'                                         Example: 2012-05-28T11:35:00
'    
'    UniversalSortableDateTimePattern: yyyy'-'MM'-'dd HH':'mm':'ss'Z'
'                                         Example: 2012-05-28 11:35:00Z
'    
'    YearMonthPattern:                 MMMM, yyyy
'                                         Example: May, 2012

注釈

クラスのプロパティには、 DateTimeFormatInfo 次のような日付と時刻の値を書式設定または解析するためのカルチャ固有の情報が含まれています。

  • 日付値の書式設定に使用されるパターン。

  • 時刻値の書式設定に使用されるパターン。

  • 曜日の名前。

  • 年の月の名前。

  • 午前 10 時 午後の時刻の 時間値で使用される指定子。

  • 日付を表す予定表。

このセクションの内容は次のとおりです。

DateTimeFormatInfo オブジェクトのインスタンス化

オブジェクトは DateTimeFormatInfo 、インバリアント カルチャ、特定のカルチャ、ニュートラル カルチャ、または現在のカルチャの書式設定規則を表すことができます。 このセクションでは、各種類の DateTimeFormatInfo オブジェクトをインスタンス化する方法について説明します。

インバリアント カルチャの DateTimeFormatInfo オブジェクトをインスタンス化する

インバリアント カルチャは、カルチャに依存しないカルチャを表します。 これは英語に基づいていますが、特定の英語を話す国/地域には基づいていません。 特定のカルチャのデータは動的であり、新しいカルチャ規則やユーザー設定を反映するように変更できますが、インバリアント カルチャのデータは変更されません。 インバリアント カルチャの書式設定規則を表すオブジェクトは、次の方法でインスタンス化 DateTimeFormatInfo できます。

次の例では、これらの各メソッドを使用して、インバリアント カルチャを DateTimeFormatInfo 表すオブジェクトをインスタンス化します。 その後、オブジェクトが読み取り専用かどうかを示します。

System.Globalization.DateTimeFormatInfo dtfi;

dtfi = System.Globalization.DateTimeFormatInfo.InvariantInfo;
Console.WriteLine(dtfi.IsReadOnly);

dtfi = new System.Globalization.DateTimeFormatInfo();
Console.WriteLine(dtfi.IsReadOnly);

dtfi = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat;
Console.WriteLine(dtfi.IsReadOnly);
// The example displays the following output:
//       True
//       False
//       True
Dim dtfi As System.Globalization.DateTimeFormatInfo

dtfi = System.Globalization.DateTimeFormatInfo.InvariantInfo
Console.WriteLine(dtfi.IsReadOnly)               

dtfi = New System.Globalization.DateTimeFormatInfo()
Console.WriteLine(dtfi.IsReadOnly)               

dtfi = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat
Console.WriteLine(dtfi.IsReadOnly) 
' The example displays the following output:
'       True
'       False
'       True

特定のカルチャの DateTimeFormatInfo オブジェクトをインスタンス化する

特定のカルチャは、特定の国/地域で話される言語を表します。 たとえば、en-US は米国で話される英語を表す特定のカルチャであり、en-CA はカナダで話される英語を表す特定のカルチャです。 特定のカルチャの DateTimeFormatInfo 書式設定規則を表すオブジェクトは、次の方法でインスタンス化できます。

次の例では、オブジェクトをインスタンス化 DateTimeFormatInfo するこれらの各方法を示し、結果のオブジェクトが読み取り専用かどうかを示します。

System.Globalization.CultureInfo ci = null;
System.Globalization.DateTimeFormatInfo dtfi = null;

// Instantiate a culture using CreateSpecificCulture.
ci = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
dtfi = ci.DateTimeFormat;
Console.WriteLine("{0} from CreateSpecificCulture: {1}", ci.Name, dtfi.IsReadOnly);

// Instantiate a culture using the CultureInfo constructor.
ci = new System.Globalization.CultureInfo("en-CA");
dtfi = ci.DateTimeFormat;
Console.WriteLine("{0} from CultureInfo constructor: {1}", ci.Name, dtfi.IsReadOnly);

// Retrieve a culture by calling the GetCultureInfo method.
ci = System.Globalization.CultureInfo.GetCultureInfo("en-AU");
dtfi = ci.DateTimeFormat;
Console.WriteLine("{0} from GetCultureInfo: {1}", ci.Name, dtfi.IsReadOnly);

// Instantiate a DateTimeFormatInfo object by calling DateTimeFormatInfo.GetInstance.
ci = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB");
dtfi = System.Globalization.DateTimeFormatInfo.GetInstance(ci);
Console.WriteLine("{0} from GetInstance: {1}", ci.Name, dtfi.IsReadOnly);

// The example displays the following output:
//      en-US from CreateSpecificCulture: False
//      en-CA from CultureInfo constructor: False
//      en-AU from GetCultureInfo: True
//      en-GB from GetInstance: False
Dim ci As System.Globalization.CultureInfo = Nothing
Dim dtfi As System.Globalization.DateTimeFormatInfo = Nothing

' Instantiate a culture using CreateSpecificCulture.
ci = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
dtfi = ci.DateTimeFormat
Console.WriteLine("{0} from CreateSpecificCulture: {1}", ci.Name, dtfi.IsReadOnly)

' Instantiate a culture using the CultureInfo constructor.
ci = new System.Globalization.CultureInfo("en-CA") 
dtfi = ci.DateTimeFormat
Console.WriteLine("{0} from CultureInfo constructor: {1}", ci.Name, dtfi.IsReadOnly)

' Retrieve a culture by calling the GetCultureInfo method.
ci = System.Globalization.CultureInfo.GetCultureInfo("en-AU")
dtfi = ci.DateTimeFormat
Console.WriteLine("{0} from GetCultureInfo: {1}", ci.Name, dtfi.IsReadOnly)


' Instantiate a DateTimeFormatInfo object by calling DateTimeFormatInfo.GetInstance.  
ci = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB")
dtfi = System.Globalization.DateTimeFormatInfo.GetInstance(ci)
Console.WriteLine("{0} from GetInstance: {1}", ci.Name, dtfi.IsReadOnly)

' The example displays the following output:
'      en-US from CreateSpecificCulture: False
'      en-CA from CultureInfo constructor: False
'      en-AU from GetCultureInfo: True
'      en-GB from GetInstance: False

ニュートラル カルチャの DateTimeFormatInfo オブジェクトをインスタンス化する

ニュートラル カルチャは、国/地域から独立したカルチャまたは言語を表します。これは通常、1 つ以上の特定のカルチャの親です。 たとえば、Fr はフランス語のニュートラル カルチャであり、fr-FR カルチャの親です。 ニュートラル カルチャの DateTimeFormatInfo 書式設定規則を表すオブジェクトは、特定のカルチャの書式設定規則を表すオブジェクトを作成 DateTimeFormatInfo するのと同じ方法でインスタンス化できます。 さらに、特定のカルチャのDateTimeFormatInfoプロパティからニュートラル カルチャを取得し、そのプロパティによってCultureInfo.DateTimeFormat返されるオブジェクトを取得することで、ニュートラル カルチャのCultureInfo.ParentオブジェクトをDateTimeFormatInfo取得できます。 親カルチャがインバリアント カルチャを表す場合を除き、返される DateTimeFormatInfo オブジェクトは読み取り/書き込みになります。 次の例は、ニュートラル カルチャを表すオブジェクトを DateTimeFormatInfo インスタンス化するこれらの方法を示しています。

System.Globalization.CultureInfo specific, neutral;
System.Globalization.DateTimeFormatInfo dtfi;

// Instantiate a culture by creating a specific culture and using its Parent property.
specific = System.Globalization.CultureInfo.GetCultureInfo("fr-FR");
neutral = specific.Parent;
dtfi = neutral.DateTimeFormat;
Console.WriteLine("{0} from Parent property: {1}", neutral.Name, dtfi.IsReadOnly);

dtfi = System.Globalization.CultureInfo.GetCultureInfo("fr-FR").Parent.DateTimeFormat;
Console.WriteLine("{0} from Parent property: {1}", neutral.Name, dtfi.IsReadOnly);

// Instantiate a neutral culture using the CultureInfo constructor.
neutral = new System.Globalization.CultureInfo("fr");
dtfi = neutral.DateTimeFormat;
Console.WriteLine("{0} from CultureInfo constructor: {1}", neutral.Name, dtfi.IsReadOnly);

// Instantiate a culture using CreateSpecificCulture.
neutral = System.Globalization.CultureInfo.CreateSpecificCulture("fr");
dtfi = neutral.DateTimeFormat;
Console.WriteLine("{0} from CreateSpecificCulture: {1}", neutral.Name, dtfi.IsReadOnly);

// Retrieve a culture by calling the GetCultureInfo method.
neutral = System.Globalization.CultureInfo.GetCultureInfo("fr");
dtfi = neutral.DateTimeFormat;
Console.WriteLine("{0} from GetCultureInfo: {1}", neutral.Name, dtfi.IsReadOnly);

// Instantiate a DateTimeFormatInfo object by calling GetInstance.
neutral = System.Globalization.CultureInfo.CreateSpecificCulture("fr");
dtfi = System.Globalization.DateTimeFormatInfo.GetInstance(neutral);
Console.WriteLine("{0} from GetInstance: {1}", neutral.Name, dtfi.IsReadOnly);

// The example displays the following output:
//       fr from Parent property: False
//       fr from Parent property: False
//       fr from CultureInfo constructor: False
//       fr-FR from CreateSpecificCulture: False
//       fr from GetCultureInfo: True
//       fr-FR from GetInstance: False
 Dim specific, neutral As System.Globalization.CultureInfo
 Dim dtfi As System.Globalization.DateTimeFormatInfo

 ' Instantiate a culture by creating a specific culture and using its Parent property.
 specific = System.Globalization.CultureInfo.GetCultureInfo("fr-FR")
 neutral = specific.Parent
 dtfi = neutral.DateTimeFormat
 Console.WriteLine("{0} from Parent property: {1}", neutral.Name, dtfi.IsReadOnly)
 
 dtfi = System.Globalization.CultureInfo.GetCultureInfo("fr-FR").Parent.DateTimeFormat
 Console.WriteLine("{0} from Parent property: {1}", neutral.Name, dtfi.IsReadOnly)

 ' Instantiate a neutral culture using the CultureInfo constructor.
 neutral = New System.Globalization.CultureInfo("fr")
 dtfi = neutral.DateTimeFormat
 Console.WriteLine("{0} from CultureInfo constructor: {1}", neutral.Name, dtfi.IsReadOnly)

 ' Instantiate a culture using CreateSpecificCulture. 
 neutral = System.Globalization.CultureInfo.CreateSpecificCulture("fr")
 dtfi = neutral.DateTimeFormat
 Console.WriteLine("{0} from CreateSpecificCulture: {1}", neutral.Name, dtfi.IsReadOnly)
 
 ' Retrieve a culture by calling the GetCultureInfo method.
 neutral = System.Globalization.CultureInfo.GetCultureInfo("fr")
 dtfi = neutral.DateTimeFormat
 Console.WriteLine("{0} from GetCultureInfo: {1}", neutral.Name, dtfi.IsReadOnly)
 
 ' Instantiate a DateTimeFormatInfo object by calling GetInstance.  
 neutral = System.Globalization.CultureInfo.CreateSpecificCulture("fr")
 dtfi = System.Globalization.DateTimeFormatInfo.GetInstance(neutral)
 Console.WriteLine("{0} from GetInstance: {1}", neutral.Name, dtfi.IsReadOnly)

 ' The example displays the following output:
 '       fr from Parent property: False
 '       fr from Parent property: False
 '       fr from CultureInfo constructor: False
 '       fr-FR from CreateSpecificCulture: False
 '       fr from GetCultureInfo: True
 '       fr-FR from GetInstance: False

注意

.NET Framework バージョン 1.0 ~ .NET Framework 3.5 では、ニュートラル カルチャの書式設定規則を反映するオブジェクトを取得DateTimeFormatInfoしようとすると、例外がNotSupportedExceptionスローされます。

ただし、ニュートラル カルチャは、特定の国/地域から独立しているため、カルチャ固有の書式設定情報がありません。 オブジェクトにジェネリック値を設定するDateTimeFormatInfo代わりに、.NET Frameworkは、ニュートラル カルチャの子である特定のカルチャの書式設定規則を反映するオブジェクトを返DateTimeFormatInfoします。 たとえば、 DateTimeFormatInfo ニュートラル en カルチャのオブジェクトは en-US カルチャの書式設定規則を反映し DateTimeFormatInfo 、fr カルチャのオブジェクトには fr-FR カルチャの書式設定規則が反映されます。

次のようなコードを使用して、ニュートラル カルチャが表す特定のカルチャの書式設定規則を決定できます。 この例では、リフレクションを使用して、ニュートラル カルチャのプロパティと特定の子カルチャのプロパティを比較 DateTimeFormatInfo します。 2 つのカレンダーが同じカレンダーの種類である場合は同等であると見なされ、グレゴリオ暦の場合はプロパティの値が同じであると GregorianCalendar.CalendarType 見なされます。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;

public class Example
{
   public static void Main()
   {
      // Get all the neutral cultures
      List<String> names = new List<String>();
      Array.ForEach(CultureInfo.GetCultures(CultureTypes.NeutralCultures),
                    culture => names.Add(culture.Name));
      names.Sort();
      foreach (var name in names) {
         // Ignore the invariant culture.
         if (name == "") continue;

         ListSimilarChildCultures(name);
      }
   }

   private static void ListSimilarChildCultures(String name)
   {
      // Create the neutral DateTimeFormatInfo object.
      DateTimeFormatInfo dtfi = CultureInfo.GetCultureInfo(name).DateTimeFormat;
      // Retrieve all specific cultures of the neutral culture.
      CultureInfo[] cultures = Array.FindAll(CultureInfo.GetCultures(CultureTypes.SpecificCultures),
                               culture => culture.Name.StartsWith(name + "-", StringComparison.OrdinalIgnoreCase));
      // Create an array of DateTimeFormatInfo properties
      PropertyInfo[] properties = typeof(DateTimeFormatInfo).GetProperties(BindingFlags.Instance | BindingFlags.Public);
      bool hasOneMatch = false;

      foreach (var ci in cultures) {
         bool match = true;
         // Get the DateTimeFormatInfo for a specific culture.
         DateTimeFormatInfo specificDtfi = ci.DateTimeFormat;
         // Compare the property values of the two.
         foreach (var prop in properties) {
            // We're not interested in the value of IsReadOnly.
            if (prop.Name == "IsReadOnly") continue;

            // For arrays, iterate the individual elements to see if they are the same.
            if (prop.PropertyType.IsArray) {
               IList nList = (IList) prop.GetValue(dtfi, null);
               IList sList = (IList) prop.GetValue(specificDtfi, null);
               if (nList.Count != sList.Count) {
                  match = false;
Console.WriteLine("   Different n in {2} array for {0} and {1}", name, ci.Name, prop.Name);
                  break;
               }

               for (int ctr = 0; ctr < nList.Count; ctr++) {
                  if (! nList[ctr].Equals(sList[ctr])) {
                     match = false;
Console.WriteLine("   {0} value different for {1} and {2}", prop.Name, name, ci.Name);
                     break;
                  }
               }

               if (! match) break;
            }
            // Get non-array values.
            else {
               Object specificValue = prop.GetValue(specificDtfi);
               Object neutralValue = prop.GetValue(dtfi);

               // Handle comparison of Calendar objects.
               if (prop.Name == "Calendar") {
                  // The cultures have a different calendar type.
                  if (specificValue.ToString() != neutralValue.ToString()) {
Console.WriteLine("   Different calendar types for {0} and {1}", name, ci.Name);
                     match = false;
                     break;
                  }

                  if (specificValue is GregorianCalendar) {
                     if (((GregorianCalendar) specificValue).CalendarType != ((GregorianCalendar) neutralValue).CalendarType) {
Console.WriteLine("   Different Gregorian calendar types for {0} and {1}", name, ci.Name);
                        match = false;
                        break;
                     }
                  }
               }
               else if (! specificValue.Equals(neutralValue)) {
                  match = false;
Console.WriteLine("   Different {0} values for {1} and {2}", prop.Name, name, ci.Name);
                  break;
               }
            }
         }
         if (match) {
            Console.WriteLine("DateTimeFormatInfo object for '{0}' matches '{1}'",
                              name, ci.Name);
            hasOneMatch = true;
         }
      }
      if (! hasOneMatch)
         Console.WriteLine("DateTimeFormatInfo object for '{0}' --> No Match", name);

      Console.WriteLine();
   }
}
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Reflection

Module Example
   Public Sub Main()
      ' Get all the neutral cultures
      Dim names As New List(Of String)
      Array.ForEach(CultureInfo.GetCultures(CultureTypes.NeutralCultures),
                    Sub(culture) names.Add(culture.Name))
      names.Sort()
      For Each name In names
         ' Ignore the invariant culture.
         If name = "" Then Continue For
         
         ListSimilarChildCultures(name)        
      Next
   End Sub

   Private Sub ListSimilarChildCultures(name As String)
      ' Create the neutral DateTimeFormatInfo object.
      Dim dtfi As DateTimeFormatInfo = CultureInfo.GetCultureInfo(name).DateTimeFormat
      ' Retrieve all specific cultures of the neutral culture.
      Dim cultures() As CultureInfo = Array.FindAll(CultureInfo.GetCultures(CultureTypes.SpecificCultures), 
                               Function(culture) culture.Name.StartsWith(name + "-", StringComparison.OrdinalIgnoreCase))
      ' Create an array of DateTimeFormatInfo properties
      Dim properties() As PropertyInfo = GetType(DateTimeFormatInfo).GetProperties(BindingFlags.Instance Or BindingFlags.Public)
      Dim hasOneMatch As Boolean = False

      For Each ci In cultures
         Dim match As Boolean = True     
         ' Get the DateTimeFormatInfo for a specific culture.
         Dim specificDtfi As DateTimeFormatInfo = ci.DateTimeFormat
         ' Compare the property values of the two.
         For Each prop In properties
            ' We're not interested in the value of IsReadOnly.     
            If prop.Name = "IsReadOnly" Then Continue For
            
            ' For arrays, iterate the individual elements to see if they are the same.
            If prop.PropertyType.IsArray Then 
               Dim nList As IList = CType(prop.GetValue(dtfi, Nothing), IList)
               Dim sList As IList = CType(prop.GetValue(specificDtfi, Nothing), IList)
               If nList.Count <> sList.Count Then
                  match = false
Console.WriteLine("   Different n in {2} array for {0} and {1}", name, ci.Name, prop.Name)
                  Exit For
               End If 

               For ctr As Integer = 0 To nList.Count - 1
                  If Not nList(ctr).Equals(sList(ctr)) 
                     match = false
Console.WriteLine("   {0} value different for {1} and {2}", prop.Name, name, ci.Name)                     
                     Exit For
                  End If     
               Next
               
               If Not match Then Exit For
            ' Get non-array values.
            Else
               Dim specificValue As Object = prop.GetValue(specificDtfi)
               Dim neutralValue As Object = prop.GetValue(dtfi)
                               
               ' Handle comparison of Calendar objects.
               If prop.Name = "Calendar" Then 
                  ' The cultures have a different calendar type.
                  If specificValue.ToString() <> neutralValue.ToString() Then
Console.WriteLine("   Different calendar types for {0} and {1}", name, ci.Name)
                     match = False
                     Exit For
                  End If
                   
                  If TypeOf specificValue Is GregorianCalendar Then
                     If CType(specificValue, GregorianCalendar).CalendarType <> CType(neutralValue, GregorianCalendar).CalendarType Then
Console.WriteLine("   Different Gregorian calendar types for {0} and {1}", name, ci.Name)
                        match = False
                        Exit For
                     End If
                  End If
               Else If Not specificValue.Equals(neutralValue) Then
                  match = false
Console.WriteLine("   Different {0} values for {1} and {2}", prop.Name, name, ci.Name)                  
                  Exit For   
               End If
            End If        
         Next
         If match Then
            Console.WriteLine("DateTimeFormatInfo object for '{0}' matches '{1}'", 
                                      name, ci.Name)
            hasOneMatch = True
         End If                                       
      Next
      If Not hasOneMatch Then
         Console.WriteLine("DateTimeFormatInfo object for '{0}' --> No Match", name)            
      End If
      
      Console.WriteLine()
   End Sub
End Module

現在のカルチャの DateTimeFormatInfo オブジェクトのインスタンス化

現在のカルチャの DateTimeFormatInfo 書式設定規則を表すオブジェクトは、次の方法でインスタンス化できます。

次の例では、これらの各メソッドを使用して、 DateTimeFormatInfo 現在のカルチャの書式設定規則を表すオブジェクトをインスタンス化します。 その後、オブジェクトが読み取り専用かどうかを示します。

DateTimeFormatInfo dtfi;

dtfi = DateTimeFormatInfo.CurrentInfo;
Console.WriteLine(dtfi.IsReadOnly);

dtfi = CultureInfo.CurrentCulture.DateTimeFormat;
Console.WriteLine(dtfi.IsReadOnly);

dtfi = DateTimeFormatInfo.GetInstance(CultureInfo.CurrentCulture);
Console.WriteLine(dtfi.IsReadOnly);
// The example displays the following output:
//     True
//     True
//     True
Dim dtfi As DateTimeFormatInfo

dtfi = DateTimeFormatInfo.CurrentInfo
Console.WriteLine(dtfi.IsReadOnly)

dtfi = CultureInfo.CurrentCulture.DateTimeFormat
Console.WriteLine(dtfi.IsReadOnly)

dtfi = DateTimeFormatInfo.GetInstance(CultureInfo.CurrentCulture)
Console.WriteLine(dtfi.IsReadOnly)
' The example displays the following output:
'     True
'     True
'     True

次のいずれかの方法で、現在のカルチャの規則を表す書き込み可能な DateTimeFormatInfo オブジェクトを作成できます。

次の例は、読み取り/書き込 DateTimeFormatInfo みオブジェクトをインスタンス化する各方法を示し、その IsReadOnly プロパティの値を表示します。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTimeFormatInfo current1 = DateTimeFormatInfo.CurrentInfo;
      current1 = (DateTimeFormatInfo) current1.Clone();
      Console.WriteLine(current1.IsReadOnly);

      CultureInfo culture2 = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
      DateTimeFormatInfo current2 = culture2.DateTimeFormat;
      Console.WriteLine(current2.IsReadOnly);
   }
}
// The example displays the following output:
//       False
//       False
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim current1 As DateTimeFormatInfo = DateTimeFormatInfo.CurrentInfo
      current1 = CType(current1.Clone(), DateTimeFormatInfo)
      Console.WriteLine(current1.IsReadOnly)

      Dim culture2 As CultureInfo = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name)
      Dim current2 As DateTimeFormatInfo = culture2.DateTimeFormat
      Console.WriteLine(current2.IsReadOnly)
   End Sub
End Module
' The example displays the following output:
'       False
'       False

Windowsでは、ユーザーは、コントロール パネルの DateTimeFormatInfo Region and Language アプリケーションを使用して、書式設定および解析操作で使用されるプロパティ値の一部をオーバーライドできます。 たとえば、カルチャが英語 (米国) のユーザーは、既定の 12 時間制 (h:mm:ss tt 形式) ではなく、24 時間制 (HH:mm:ss 形式) を使用して長い時間値を表示することを選択できます。 前に説明した方法で取得されたオブジェクトには DateTimeFormatInfo 、これらのユーザーのオーバーライドが反映されます。 これが望ましくない場合は、コンストラクターをNumberFormatInfo呼び出CultureInfo.CultureInfo(String, Boolean)して引数の値false``useUserOverrideを指定することで、ユーザーのオーバーライドを反映しないオブジェクト (読み取り専用ではなく読み取り/書き込みも行う) を作成できます。 次の例は、現在のカルチャが英語 (米国) で、長い時間パターンが既定の h:mm:ss tt から HH:mm:ss に変更されたシステムの場合を示しています。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture;
      DateTimeFormatInfo dtfi;

      culture = CultureInfo.CurrentCulture;
      dtfi = culture.DateTimeFormat;
      Console.WriteLine("Culture Name:      {0}", culture.Name);
      Console.WriteLine("User Overrides:    {0}", culture.UseUserOverride);
      Console.WriteLine("Long Time Pattern: {0}\n", culture.DateTimeFormat.LongTimePattern);

      culture = new CultureInfo(CultureInfo.CurrentCulture.Name, false);
      Console.WriteLine("Culture Name:      {0}",   culture.Name);
      Console.WriteLine("User Overrides:    {0}",   culture.UseUserOverride);
      Console.WriteLine("Long Time Pattern: {0}\n", culture.DateTimeFormat.LongTimePattern);
   }
}
// The example displays the following output:
//       Culture Name:      en-US
//       User Overrides:    True
//       Long Time Pattern: HH:mm:ss
//
//       Culture Name:      en-US
//       User Overrides:    False
//       Long Time Pattern: h:mm:ss tt
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim culture As CultureInfo
      Dim dtfi As DateTimeFormatInfo
      
      culture = CultureInfo.CurrentCulture
      dtfi = culture.DateTimeFormat
      Console.WriteLine("Culture Name:      {0}", culture.Name)
      Console.WriteLine("User Overrides:    {0}", culture.UseUserOverride)
      Console.WriteLine("Long Time Pattern: {0}", culture.DateTimeFormat.LongTimePattern)
      Console.WriteLine()
            
      culture = New CultureInfo(CultureInfo.CurrentCulture.Name, False)
      Console.WriteLine("Culture Name:      {0}", culture.Name)
      Console.WriteLine("User Overrides:    {0}", culture.UseUserOverride)
      Console.WriteLine("Long Time Pattern: {0}", culture.DateTimeFormat.LongTimePattern)
   End Sub
End Module
' The example displays the following output:
'       Culture Name:      en-US
'       User Overrides:    True
'       Long Time Pattern: HH:mm:ss
'       
'       Culture Name:      en-US
'       User Overrides:    False
'       Long Time Pattern: h:mm:ss tt

DateTimeFormatInfo と動的データ

クラスによって提供される日付と時刻の値を書式設定するためのカルチャ固有の DateTimeFormatInfo データは、クラスによって提供されるカルチャ データと同様に CultureInfo 動的です。 特定CultureInfoのオブジェクトに関連付けられているオブジェクトの値DateTimeFormatInfoの安定性を想定しないでください。 インバリアント カルチャとそれに関連付けられている DateTimeFormatInfo オブジェクトによって提供されるデータのみが安定しています。 その他のデータは、アプリケーション セッション間で、またはアプリケーションの実行中でも変更される可能性があります。 次の 4 つの主要な変更ソースがあります。

  • システムの更新。 優先カレンダーや慣例的な日付と時刻の形式などのカルチャの設定は、時間の経過と同時に変化します。 この場合、Windows Updateには特定のカルチャのDateTimeFormatInfoプロパティ値の変更が含まれます。

  • 置換カルチャ。 この CultureAndRegionInfoBuilder クラスを使用して、既存のカルチャのデータを置き換えることができます。

  • プロパティ値に対するカスケード変更。 カルチャに関連するプロパティの数は実行時に変更される可能性があり、その結果、データが DateTimeFormatInfo 変更されます。 たとえば、現在のカルチャは、プログラムまたはユーザー アクションを使用して変更できます。 この場合、 DateTimeFormatInfo プロパティによって返されるオブジェクトは、現在の CurrentInfo カルチャに関連付けられているオブジェクトに変更されます。 同様に、カルチャのカレンダーは変更される可能性があり、その結果、多数 DateTimeFormatInfo のプロパティ値が変更される可能性があります。

  • ユーザー設定。 アプリケーションのユーザーは、コントロール パネルの地域と言語のオプションを使用して、現在のシステム カルチャに関連付けられている値の一部をオーバーライドすることを選択できます。 たとえば、ユーザーは別の形式で日付を表示することを選択できます。 プロパティが CultureInfo.UseUserOverride 設定 trueされている場合、オブジェクトの DateTimeFormatInfo プロパティもユーザー設定から取得されます。 ユーザー設定がオブジェクトに関連付 CultureInfo けられているカルチャと互換性がない場合 (たとえば、選択したカレンダーがプロパティによって OptionalCalendars 示されるカレンダーの 1 つでない場合)、メソッドの結果とプロパティの値は未定義になります。

不整合なデータの可能性を最小限に抑えるために、オブジェクトのユーザーがオーバーライドできるすべてのプロパティは、オブジェクトの DateTimeFormatInfo 作成時に初期化されます。 オブジェクトの作成もユーザーオーバーライドプロセスもアトミックでなく、オブジェクトの作成時に関連する値が変更される可能性があるため、不整合が発生する可能性があります。 ただし、この状況は非常にまれです。

システム カルチャと同じカルチャを表すオブジェクトに DateTimeFormatInfo ユーザーのオーバーライドを反映するかどうかを制御できます。 次の表に、オブジェクトを取得する DateTimeFormatInfo 方法と、結果のオブジェクトにユーザーのオーバーライドが反映されるかどうかを示します。

CultureInfo オブジェクトと DateTimeFormatInfo オブジェクトのソース ユーザーのオーバーライドを反映します
CultureInfo.CurrentCulture.DateTimeFormat プロパティ はい
DateTimeFormatInfo.CurrentInfo プロパティ はい
CultureInfo.CreateSpecificCulture メソッド はい
CultureInfo.GetCultureInfo メソッド いいえ
CultureInfo.CultureInfo(String) コンストラクター はい
CultureInfo.CultureInfo(String, Boolean) コンストラクター パラメーターの useUserOverride 値に依存

他の方法で実行する説得力のある理由がない限り、クライアント アプリケーションでオブジェクトを使用 DateTimeFormatInfo してユーザー入力の書式設定と解析を行ったり、データを表示したりする場合は、ユーザーのオーバーライドを考慮する必要があります。 サーバー アプリケーションまたは無人アプリケーションの場合は、実行しないでください。 ただし、明示的または暗黙的にオブジェクトを DateTimeFormatInfo 使用して日付と時刻のデータを文字列形式で保持する場合は、インバリアント カルチャの書式設定規則を反映するオブジェクトを使用 DateTimeFormatInfo するか、カルチャに関係なく使用するカスタムの日付と時刻書式指定文字列を指定する必要があります。

日付と時刻の書式設定

DateTimeFormatInfoオブジェクトは、すべての日付と時刻の書式設定操作で暗黙的または明示的に使用されます。 これには、次のメソッドの呼び出しが含まれます。

すべての日付と時刻の書式設定操作では、実装が IFormatProvider 使用されます。 インターフェイスには IFormatProvider 、単一のメソッドが IFormatProvider.GetFormat(Type)含まれています。 このコールバック メソッドには、書式設定情報を Type 提供するために必要な型を表すオブジェクトが渡されます。 このメソッドは、その型のインスタンスを返すか、型 null のインスタンスを指定できない場合に返します。 .NET Frameworkには、日付と時刻を書式設定するための 2 つのIFormatProvider実装が含まれています。

実装がIFormatProvider書式設定メソッドに明示的に提供されていない場合は、現在のカルチャをCultureInfoCultureInfo.CurrentCulture表すプロパティによって返されるオブジェクトが使用されます。

次の例は、書式設定操作における IFormatProvider インターフェイスとクラスの DateTimeFormatInfo 関係を示しています。 書式設定操作によって要求されたオブジェクトの型をメソッドで表示するカスタム IFormatProvider 実装 GetFormat を定義します。 オブジェクトを要求している DateTimeFormatInfo 場合、メソッドは現在のカルチャの DateTimeFormatInfo オブジェクトを提供します。 この例の出力が示すように、Decimal.ToString(IFormatProvider)メソッドは書式設定情報を提供するようにオブジェクトを要求DateTimeFormatInfoしますがString.Format(IFormatProvider, String, Object[])、メソッドは実装と同様にオブジェクトをICustomFormatter要求NumberFormatInfoDateTimeFormatInfoします。

using System;
using System.Globalization;

public class CurrentCultureFormatProvider : IFormatProvider
{
   public Object GetFormat(Type formatType)
   {
      Console.WriteLine("Requesting an object of type {0}",
                        formatType.Name);
      if (formatType == typeof(NumberFormatInfo))
         return NumberFormatInfo.CurrentInfo;
      else if (formatType == typeof(DateTimeFormatInfo))
         return DateTimeFormatInfo.CurrentInfo;
      else
         return null;
   }
}

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2013, 5, 28, 13, 30, 0);
      string value = dateValue.ToString("F", new CurrentCultureFormatProvider());
      Console.WriteLine(value);
      Console.WriteLine();
      string composite = String.Format(new CurrentCultureFormatProvider(),
                                       "Date: {0:d}   Amount: {1:C}   Description: {2}",
                                       dateValue, 1264.03m, "Service Charge");
      Console.WriteLine(composite);
      Console.WriteLine();
   }
}
// The example displays output like the following:
//       Requesting an object of type DateTimeFormatInfo
//       Tuesday, May 28, 2013 1:30:00 PM
//
//       Requesting an object of type ICustomFormatter
//       Requesting an object of type DateTimeFormatInfo
//       Requesting an object of type NumberFormatInfo
//       Date: 5/28/2013   Amount: $1,264.03   Description: Service Charge
Imports System.Globalization

Public Class CurrentCultureFormatProvider : Implements IFormatProvider
   Public Function GetFormat(formatType As Type) As Object _
                   Implements IFormatProvider.GetFormat
      Console.WriteLine("Requesting an object of type {0}", 
                        formatType.Name)
      If formatType Is GetType(NumberFormatInfo) Then
         Return NumberFormatInfo.CurrentInfo
      Else If formatType Is GetType(DateTimeFormatInfo) Then
         Return DateTimeFormatInfo.CurrentInfo
      Else
         Return Nothing
      End If
   End Function
End Class

Module Example
   Public Sub Main()
      Dim dateValue As New Date(2013, 05, 28, 13, 30, 0)
      Dim value As String = dateValue.ToString("F", New CurrentCultureFormatProvider())
      Console.WriteLine(value)
      Console.WriteLine()
      Dim composite As String = String.Format(New CurrentCultureFormatProvider, 
                                              "Date: {0:d}   Amount: {1:C}   Description: {2}",
                                              dateValue, 1264.03d, "Service Charge")
      Console.WriteLine(composite)
      Console.WriteLine()
   End Sub
End Module
' The example displays output like the following:
'       Requesting an object of type DateTimeFormatInfo
'       Tuesday, May 28, 2013 1:30:00 PM
'       
'       Requesting an object of type ICustomFormatter
'       Requesting an object of type DateTimeFormatInfo
'       Requesting an object of type NumberFormatInfo
'       Date: 5/28/2013   Amount: $1,264.03   Description: Service Charge

書式指定文字列と DateTimeFormatInfo プロパティ

この DateTimeFormatInfo オブジェクトには、日付と時刻の値を使用した書式設定操作で使用される 3 種類のプロパティが含まれています。

"d"、"D"、"f"、"F" などの 標準の日付と時刻の書式指定文字列は、特定 DateTimeFormatInfo の書式パターンプロパティに対応するエイリアスです。 カスタムの日付と時刻の書式指定文字列のほとんどは、書式設定操作によって結果ストリームに挿入される文字列または部分文字列に関連しています。 次の表に、標準およびカスタムの日付と時刻の書式指定子とそれに関連付けられている DateTimeFormatInfo プロパティを示します。 これらの書式指定子の使用方法の詳細については、「標準の日付と時刻の書式指定文字列」および「カスタム日時書式指定文字列」を参照してください。 各標準書式指定文字列は、 DateTimeFormatInfo 値がカスタム日時書式指定文字列であるプロパティに対応します。 このカスタム書式指定文字列の個々の指定子は、他 DateTimeFormatInfo のプロパティに対応します。 この表には、標準書式指定文字列が別名であるプロパティのみが DateTimeFormatInfo 一覧表示され、それらのエイリアス化されたプロパティに割り当てられたカスタム書式指定文字列によってアクセスされる可能性があるプロパティは一覧表示されません。 さらに、この表には、プロパティに対応 DateTimeFormatInfo するカスタム書式指定子のみが一覧表示されます。

書式指定子 関連付けられたプロパティ
"d" (短い日付;標準書式指定文字列) ShortDatePattern: 結果文字列の全体的な形式を定義します。
"D" (長い日付;標準書式指定文字列) LongDatePattern: 結果文字列の全体的な形式を定義します。
"f" (完全な日付/短い時刻;標準書式指定文字列) LongDatePattern: 結果文字列の日付コンポーネントの形式を定義します。

ShortTimePattern: 結果文字列の時間コンポーネントの形式を定義します。
"F" (完全な日付/長い時間;標準書式指定文字列) LongDatePattern: 結果文字列の日付コンポーネントの形式を定義します。

LongTimePattern: 結果文字列の時間コンポーネントの形式を定義します。
"g" (一般的な日付/短い時刻;標準書式指定文字列) ShortDatePattern: 結果文字列の日付コンポーネントの形式を定義します。

ShortTimePattern: 結果文字列の時間コンポーネントの形式を定義します。
"G" (一般的な日付/長い時間;標準書式指定文字列) ShortDatePattern: 結果文字列の日付コンポーネントの形式を定義します。

LongTimePattern: 結果文字列の時間コンポーネントの形式を定義します。
"M"、"m" (月/日;標準書式指定文字列) MonthDayPattern: 結果文字列の全体的な形式を定義します。
"O"、"o" (ラウンドトリップの日付/時刻、標準書式指定文字列) [なし] :
"R"、"r" (RFC1123;標準書式指定文字列) RFC1123Pattern: RFC 1123 標準に準拠する結果文字列を定義します。 このプロパティは読み取り専用です。
"s" (並べ替え可能な日付/時刻;標準書式指定文字列) SortableDateTimePattern: ISO 8601 標準に準拠する結果文字列を定義します。 このプロパティは読み取り専用です。
"t" (短い時刻;標準書式指定文字列) ShortTimePattern: 結果文字列の全体的な形式を定義します。
"T" (長い時間;標準書式指定文字列) LongTimePattern: 結果文字列の全体的な形式を定義します。
"u" (ユニバーサル並べ替え可能な日付/時刻;標準書式指定文字列) UniversalSortableDateTimePattern: 協定世界時の ISO 8601 標準に準拠する結果文字列を定義します。 このプロパティは読み取り専用です。
"U" (ユニバーサル完全な日付/時刻;標準書式指定文字列) FullDateTimePattern: 結果文字列の全体的な形式を定義します。
"Y"、"y" (年月;標準書式指定文字列) YearMonthPattern: 結果文字列の全体的な形式を定義します。
"ddd" (カスタム書式指定子) AbbreviatedDayNames: 結果文字列に曜日の省略名を含めます。
"g"、"gg" (カスタム書式指定子) メソッドを GetEraName 呼び出して、結果文字列に時代 (era) の名前を挿入します。
"MMM" (カスタム書式指定子) AbbreviatedMonthNamesは、省略された月の名前を結果文字列に含めます。
"MMMM" (カスタム書式指定子) MonthNames または MonthGenitiveNames、結果文字列に完全な月の名前を含めます。
"t" (カスタム書式指定子) AMDesignator または PMDesignator、AM/PM 指定子の最初の文字を結果文字列に含めます。
"tt" (カスタム書式指定子) AMDesignator または PMDesignator、結果文字列に完全な AM/PM 指定子を含めます。
":" (カスタム書式指定子) TimeSeparator: 結果文字列に時刻区切り記号を含めます。
"/" (カスタム書式指定子) DateSeparator: 結果文字列に日付区切り記号を含めます。

DateTimeFormatInfo プロパティの変更

書き込み可能な DateTimeFormatInfo オブジェクトの関連付けられたプロパティを変更することで、日付と時刻の書式指定文字列によって生成される結果文字列を変更できます。 オブジェクトが DateTimeFormatInfo 書き込み可能かどうかを判断するには、プロパティを IsReadOnly 使用します。 この方法でオブジェクトを DateTimeFormatInfo カスタマイズするには:

  1. 書式設定規則を変更する DateTimeFormatInfo オブジェクトの読み取り/書き込みコピーを作成します。 ( DateTimeFormatInfo オブジェクトのインスタンス化 に関するセクションを参照してください)。

  2. 目的の結果文字列を生成するために使用するプロパティを変更します。 (書式設定メソッドでプロパティを使用 DateTimeFormatInfo して結果文字列を定義する方法については、前のセクション「 文字列の書式設定」および「DateTimeFormatInfo プロパティ」を参照してください)。

  3. 書式設定メソッドの呼び出しで引数としてIFormatProvider作成したカスタム DateTimeFormatInfo オブジェクトを使用します。

結果文字列の形式を変更するには、他に 2 つの方法があります。

  • このクラスを CultureAndRegionInfoBuilder 使用して、カスタム カルチャ (一意の名前を持ち、既存のカルチャを補完するカルチャ) または置換カルチャ (特定のカルチャの代わりに使用されるカルチャ) を定義できます。 このカルチャは、.NET FrameworkでサポートされているオブジェクトCultureInfoと同様に、プログラムで保存してアクセスできます。

  • 結果文字列がカルチャに依存せず、定義済みの形式に従っていない場合は、カスタムの日時書式指定文字列を使用できます。 たとえば、日付と時刻のデータを YYYYMMDDHHmmss 形式でシリアル化する場合は、カスタム書式指定文字列をメソッドに渡すことによって結果文字列DateTime.ToString(String)を生成し、メソッドを呼び出DateTime.ParseExactして結果文字列を値にDateTime変換できます。

短い日付パターンの変更

次の例では、"d" (短い日付) 標準書式指定文字列によって生成される結果文字列の形式を変更します。 en-US または英語 (米国) カルチャの関連付けられたShortDatePatternプロパティを既定の "M/d/yyyy" から "yyyy'-"MM"-"-"dd" に変更し、"d" 標準書式指定文字列を使用して、プロパティが変更される前後の日付をShortDatePattern表示します。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2013, 8, 18);
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      DateTimeFormatInfo dtfi = enUS.DateTimeFormat;

      Console.WriteLine("Before modifying DateTimeFormatInfo object: ");
      Console.WriteLine("{0}: {1}\n", dtfi.ShortDatePattern,
                                    dateValue.ToString("d", enUS));

      // Modify the short date pattern.
      dtfi.ShortDatePattern = "yyyy-MM-dd";
      Console.WriteLine("After modifying DateTimeFormatInfo object: ");
      Console.WriteLine("{0}: {1}", dtfi.ShortDatePattern,
                                    dateValue.ToString("d", enUS));
   }
}
// The example displays the following output:
//       Before modifying DateTimeFormatInfo object:
//       M/d/yyyy: 8/18/2013
//
//       After modifying DateTimeFormatInfo object:
//       yyyy-MM-dd: 2013-08-18
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateValue As New Date(2013, 08, 18) 
      Dim enUS As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Dim dtfi As DateTimeFormatInfo = enUS.DateTimeFormat
      
      Console.WriteLine("Before modifying DateTimeFormatInfo object: ")
      Console.WriteLine("{0}: {1}", dtfi.ShortDatePattern, 
                                    dateValue.ToString("d", enUS))
      Console.WriteLine()
      
      ' Modify the short date pattern.
      dtfi.ShortDatePattern = "yyyy-MM-dd"
      Console.WriteLine("After modifying DateTimeFormatInfo object: ")
      Console.WriteLine("{0}: {1}", dtfi.ShortDatePattern, 
                                    dateValue.ToString("d", enUS))
   End Sub
End Module
' The example displays the following output:
'       Before modifying DateTimeFormatInfo object:
'       M/d/yyyy: 8/18/2013
'       
'       After modifying DateTimeFormatInfo object:
'       yyyy-MM-dd: 2013-08-18

日付区切り文字の変更

次の使用例は、fr-FR カルチャの書式設定規則を表すオブジェクトの日付区切り文字 DateTimeFormatInfo を変更します。 この例では、"g" 標準書式指定文字列を使用して、プロパティが変更される前と後の両方の日付を DateSeparator 表示します。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2013, 08, 28);
      CultureInfo frFR = CultureInfo.CreateSpecificCulture("fr-FR");
      DateTimeFormatInfo dtfi = frFR.DateTimeFormat;

      Console.WriteLine("Before modifying DateSeparator property: {0}",
                        dateValue.ToString("g", frFR));

      // Modify the date separator.
      dtfi.DateSeparator = "-";
      Console.WriteLine("After modifying the DateSeparator property: {0}",
                        dateValue.ToString("g", frFR));
   }
}
// The example displays the following output:
//       Before modifying DateSeparator property: 28/08/2013 00:00
//       After modifying the DateSeparator property: 28-08-2013 00:00
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateValue As New Date(2013, 08, 28) 
      Dim frFR As CultureInfo = CultureInfo.CreateSpecificCulture("fr-FR")
      Dim dtfi As DateTimeFormatInfo = frFR.DateTimeFormat
      
      Console.WriteLine("Before modifying DateSeparator property: {0}",
                        dateValue.ToString("g", frFR))
      
      ' Modify the date separator.
      dtfi.DateSeparator = "-"
      Console.WriteLine("After modifying the DateSeparator property: {0}",
                        dateValue.ToString("g", frFR))
   End Sub
End Module
' The example displays the following output:
'       Before modifying DateSeparator property: 28/08/2013 00:00
'       After modifying the DateSeparator property: 28-08-2013 00:00

曜日名の省略形と長い日付パターンの変更

場合によっては、通常、日と月の名前が月と年の日の数と共に表示される長い日付パターンが長すぎる可能性があります。 次の使用例は、en-US カルチャの長い日付パターンを短くして、1 文字または 2 文字の曜日名の省略形を返し、その後に日番号、月名の省略形、および年を返します。 これを行うには、短い曜日名の省略形を配列に割り当て、プロパティに AbbreviatedDayNames 割り当てられたカスタム書式指定文字列を LongDatePattern 変更します。 これは、"D" および "f" 標準書式指定文字列によって返される結果文字列に影響します。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime value = new DateTime(2013, 7, 9);
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      DateTimeFormatInfo dtfi = enUS.DateTimeFormat;
      String[] formats = { "D", "F", "f" };

      // Display date before modifying properties.
      foreach (var fmt in formats)
         Console.WriteLine("{0}: {1}", fmt, value.ToString(fmt, dtfi));

      Console.WriteLine();

      // We don't want to change the FullDateTimePattern, so we need to save it.
      String originalFullDateTimePattern = dtfi.FullDateTimePattern;

      // Modify day name abbreviations and long date pattern.
      dtfi.AbbreviatedDayNames = new String[] { "Su", "M", "Tu", "W", "Th", "F", "Sa" };
      dtfi.LongDatePattern = "ddd dd-MMM-yyyy";
      dtfi.FullDateTimePattern = originalFullDateTimePattern;
      foreach (var fmt in formats)
         Console.WriteLine("{0}: {1}", fmt, value.ToString(fmt, dtfi));
   }
}
// The example displays the following output:
//       D: Tuesday, July 9, 2013
//       F: Tuesday, July 9, 2013 12:00:00 AM
//       f: Tuesday, July 9, 2013 12:00 AM
//
//       D: Tu 09-Jul-2013
//       F: Tuesday, July 9, 2013 12:00:00 AM
//       f: Tu 09-Jul-2013 12:00 AM
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim value As New Date(2013, 7, 9)
      Dim enUS As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Dim dtfi As DateTimeFormatInfo = enUS.DateTimeFormat
      Dim formats() As String = { "D", "F", "f" }

      ' Display date before modifying properties.
      For Each fmt In formats
         Console.WriteLine("{0}: {1}", fmt, value.ToString(fmt, dtfi))
      Next
      Console.WriteLine()
      
      ' We don't want to change the FullDateTimePattern, so we need to save it.
      Dim originalFullDateTimePattern As String = dtfi.FullDateTimePattern
      
      ' Modify day name abbreviations and long date pattern.
      dtfi.AbbreviatedDayNames = { "Su", "M", "Tu", "W", "Th", "F", "Sa" }
      dtfi.LongDatePattern = "ddd dd-MMM-yyyy"
      dtfi.FullDateTimePattern = originalFullDateTimePattern
      For Each fmt In formats
         Console.WriteLine("{0}: {1}", fmt, value.ToString(fmt, dtfi))
      Next
   End Sub
End Module
' The example displays the following output:
'       D: Tuesday, July 9, 2013
'       F: Tuesday, July 9, 2013 12:00:00 AM
'       f: Tuesday, July 9, 2013 12:00 AM
'
'       D: Tu 09-Jul-2013
'       F: Tuesday, July 9, 2013 12:00:00 AM
'       f: Tu 09-Jul-2013 12:00 AM

通常、プロパティへの LongDatePattern 変更はプロパティにも影響 FullDateTimePattern し、"F" 標準書式指定文字列によって返される結果文字列が定義されます。 元の完全な日付と時刻のパターンを保持するために、プロパティが変更された後に、プロパティに割り当てられた元の FullDateTimePattern カスタム書式指定文字列を LongDatePattern 再割り当てします。

12 時間制から 24 時間制に変更する

.NET Frameworkの多くのカルチャでは、時刻は 12 時間制と AM/PM 指定子を使用して表されます。 次の例では、 ReplaceWith24HourClock 12 時間制を使用する任意の時刻形式を、24 時間制を使用する形式に置き換えるメソッドを定義します。

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      DateTimeFormatInfo dtfi = enUS.DateTimeFormat;

      Console.WriteLine("Original Property Values:");
      Console.WriteLine("ShortTimePattern: " + dtfi.ShortTimePattern);
      Console.WriteLine("LongTimePattern: " + dtfi.LongTimePattern);
      Console.WriteLine("FullDateTimePattern: " + dtfi.FullDateTimePattern);
      Console.WriteLine();

      dtfi.LongTimePattern = ReplaceWith24HourClock(dtfi.LongTimePattern);
      dtfi.ShortTimePattern = ReplaceWith24HourClock(dtfi.ShortTimePattern);

      Console.WriteLine("Modififed Property Values:");
      Console.WriteLine("ShortTimePattern: " + dtfi.ShortTimePattern);
      Console.WriteLine("LongTimePattern: " + dtfi.LongTimePattern);
      Console.WriteLine("FullDateTimePattern: " + dtfi.FullDateTimePattern);
   }

   private static string ReplaceWith24HourClock(string fmt)
   {
      string pattern = @"^(?<openAMPM>\s*t+\s*)? " +
                       @"(?(openAMPM) h+(?<nonHours>[^ht]+)$ " +
                       @"| \s*h+(?<nonHours>[^ht]+)\s*t+)";
      return Regex.Replace(fmt, pattern, "HH${nonHours}",
                           RegexOptions.IgnorePatternWhitespace);
   }
}
// The example displays the following output:
//       Original Property Values:
//       ShortTimePattern: h:mm tt
//       LongTimePattern: h:mm:ss tt
//       FullDateTimePattern: dddd, MMMM dd, yyyy h:mm:ss tt
//
//       Modififed Property Values:
//       ShortTimePattern: HH:mm
//       LongTimePattern: HH:mm:ss
//       FullDateTimePattern: dddd, MMMM dd, yyyy HH:mm:ss
Imports System.Globalization
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim enUS As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Dim dtfi As DateTimeFormatInfo = enUS.DateTimeFormat

      Console.WriteLine("Original Property Values:")
      Console.WriteLine("ShortTimePattern: " + dtfi.ShortTimePattern)
      Console.WriteLine("LongTimePattern: " + dtfi.LongTimePattern)
      Console.WriteLine("FullDateTimePattern: " + dtfi.FullDateTimePattern)
      Console.WriteLine()
      
      dtfi.LongTimePattern = ReplaceWith24HourClock(dtfi.LongTimePattern)
      dtfi.ShortTimePattern = ReplaceWith24HourClock(dtfi.ShortTimePattern)
      
      Console.WriteLine("Modififed Property Values:")
      Console.WriteLine("ShortTimePattern: " + dtfi.ShortTimePattern)
      Console.WriteLine("LongTimePattern: " + dtfi.LongTimePattern)
      Console.WriteLine("FullDateTimePattern: " + dtfi.FullDateTimePattern)
   End Sub
   
   Private Function ReplaceWith24HourClock(fmt As String) As String
      Dim pattern As String = "^(?<openAMPM>\s*t+\s*)? " +
                              "(?(openAMPM) h+(?<nonHours>[^ht]+)$ " +
                              "| \s*h+(?<nonHours>[^ht]+)\s*t+)"
      Return Regex.Replace(fmt, pattern, "HH${nonHours}", RegexOptions.IgnorePatternWhitespace)   
   End Function
End Module
' The example displays the following output:
'       Original Property Values:
'       ShortTimePattern: h:mm tt
'       LongTimePattern: h:mm:ss tt
'       FullDateTimePattern: dddd, MMMM dd, yyyy h:mm:ss tt
'       
'       Modififed Property Values:
'       ShortTimePattern: HH:mm
'       LongTimePattern: HH:mm:ss
'       FullDateTimePattern: dddd, MMMM dd, yyyy HH:mm:ss

この例では、正規表現を使用して書式指定文字列を変更します。 正規表現パターン @"^(?<openAMPM>\s*t+\s*)? (?(openAMPM) h+(?<nonHours>[^ht]+)$ | \s*h+(?<nonHours>[^ht]+)\s*t+) は次のように定義されます。

Pattern 説明
^ 文字列の先頭から照合を開始します。
(?<openAMPM>\s*t+\s*)? 0 個以上の空白文字が 0 個または 1 回出現し、その後に文字 "t" が 1 回以上続き、その後に 0 個以上の空白文字が続きます。 このキャプチャ グループには名前が付けられています openAMPM
(?(openAMPM) h+(?<nonHours>[^ht]+)$ グループが openAMPM 一致する場合は、文字 "h" を 1 回以上一致し、その後に "h" と "t" のどちらでもない 1 つ以上の文字を一致させます。 一致は文字列の末尾で終了します。 "h" の後にキャプチャされたすべての文字は、名前付きの nonHoursキャプチャ グループに含まれます。
&#124; \s*h+(?<nonHours>[^ht]+)\s*t+) グループに openAMPM 一致がない場合は、文字 "h" を 1 回以上一致し、その後に "h" も "t" でもない 1 つ以上の文字の後に、0 個以上の空白文字が続きます。 最後に、文字 "t" の 1 つ以上の出現箇所と一致します。 "h" の後、および空白文字と "t" の前にキャプチャされたすべての文字は、名前付きの nonHoursキャプチャ グループに含まれます。

nonHoursキャプチャ グループには、時刻区切り記号と共に、カスタムの日時書式指定文字列の分と場合によっては 2 番目のコンポーネントが含まれます。 置換パターン HH${nonHours} は、これらの要素の前に部分文字列 "HH" を付加します。

日付の時代 (年号) の表示と変更

次の例では、en-US カルチャの書式設定規則を LongDatePattern 表すオブジェクトのプロパティに "g" カスタム書式指定子を追加します。 この追加は、次の 3 つの標準書式指定文字列に影響します。

  • "D" (長い日付) 標準書式指定文字列。プロパティに LongDatePattern 直接マップされます。

  • "f" (完全な日付/短い時刻) 標準書式指定文字列。この文字列は、and プロパティによって生成される部分文字列を連結する結果文字列をLongDatePatternShortTimePattern生成します。

  • プロパティに直接 FullDateTimePattern マップされる "F" (完全な日付/長い時間) 標準書式指定文字列。 このプロパティ値は明示的に設定されていないため、プロパティとLongTimePatternプロパティを連結することで動的にLongDatePattern生成されます。

この例では、カレンダーに 1 つの時代 (年号) があるカルチャの時代 (年号) の名前を変更する方法も示します。 この場合、en-US カルチャでは、オブジェクトによって表されるグレゴリオ暦が GregorianCalendar 使用されます。 このクラスは GregorianCalendar 、A.D という名前の単一の時代 (年号) をサポートしています。 (Anno Domini)。 この例では、時代 (年号) の名前を C.E に変更します。 (Common Era) プロパティに割り当てられた書式指定文字列の "g" カスタム書式指定子を FullDateTimePattern リテラル文字列に置き換えます。 通常、時代 (era) 名は、.NET FrameworkまたはWindows オペレーティング システムによって提供されるカルチャ テーブル内のプライベート データからメソッドによって返GetEraNameされるため、リテラル文字列を使用する必要があります。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      DateTime dateValue = new DateTime(2013, 5, 18, 13, 30, 0);
      String[] formats = { "D", "f", "F" };

      CultureInfo enUS = CultureInfo.CreateSpecificCulture("en-US");
      DateTimeFormatInfo dtfi = enUS.DateTimeFormat;
      String originalLongDatePattern = dtfi.LongDatePattern;

      // Display the default form of three long date formats.
      foreach (var fmt in formats)
         Console.WriteLine(dateValue.ToString(fmt, dtfi));

      Console.WriteLine();

      // Modify the long date pattern.
      dtfi.LongDatePattern = originalLongDatePattern + " g";
      foreach (var fmt in formats)
         Console.WriteLine(dateValue.ToString(fmt, dtfi));

      Console.WriteLine();

      // Change A.D. to C.E. (for Common Era)
      dtfi.LongDatePattern = originalLongDatePattern + @" 'C.E.'";
      foreach (var fmt in formats)
         Console.WriteLine(dateValue.ToString(fmt, dtfi));
   }
}
// The example displays the following output:
//       Saturday, May 18, 2013
//       Saturday, May 18, 2013 1:30 PM
//       Saturday, May 18, 2013 1:30:00 PM
//
//       Saturday, May 18, 2013 A.D.
//       Saturday, May 18, 2013 A.D. 1:30 PM
//       Saturday, May 18, 2013 A.D. 1:30:00 PM
//
//       Saturday, May 18, 2013 C.E.
//       Saturday, May 18, 2013 C.E. 1:30 PM
//       Saturday, May 18, 2013 C.E. 1:30:00 PM
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateValue As New Date(2013, 5, 18, 13, 30, 0)
      Dim formats() As String = { "D", "f", "F" }      
      
      Dim enUS As CultureInfo = CultureInfo.CreateSpecificCulture("en-US")
      Dim dtfi As DateTimeFormatInfo = enUS.DateTimeFormat
      Dim originalLongDatePattern As String = dtfi.LongDatePattern

      ' Display the default form of three long date formats.
      For Each fmt In formats
         Console.WriteLine(dateValue.ToString(fmt, dtfi))
      Next
      Console.WriteLine()
      
      ' Modify the long date pattern.
      dtfi.LongDatePattern = originalLongDatePattern + " g"
      For Each fmt In formats
         Console.WriteLine(dateValue.ToString(fmt, dtfi))
      Next
      Console.WriteLine()
      
      ' Change A.D. to C.E. (for Common Era)
      dtfi.LongDatePattern = originalLongDatePattern + " 'C.E.'"
      For Each fmt In formats
         Console.WriteLine(dateValue.ToString(fmt, dtfi))
      Next
   End Sub
End Module
' The example displays the following output:
'       Saturday, May 18, 2013
'       Saturday, May 18, 2013 1:30 PM
'       Saturday, May 18, 2013 1:30:00 PM
'       
'       Saturday, May 18, 2013 A.D.
'       Saturday, May 18, 2013 A.D. 1:30 PM
'       Saturday, May 18, 2013 A.D. 1:30:00 PM
'       
'       Saturday, May 18, 2013 C.E.
'       Saturday, May 18, 2013 C.E. 1:30 PM
'       Saturday, May 18, 2013 C.E. 1:30:00 PM

日付と時刻文字列の解析

解析では、日付と時刻の文字列形式を 1 つまたはDateTimeOffset複数DateTimeの値に変換します。 これらの型には、解析操作を Parseサポートするメソッド 、 TryParseParseExactおよび TryParseExact メソッドが含まれます。 メソッドParseTryParse、さまざまな形式を持つ文字列を変換しますがParseExact``TryParseExact、文字列の書式または書式が定義されている必要があります。 解析操作が失敗し、Parse例外がスローされるのに対TryParseParseExact``TryParseExact、戻るfalse場合は .

解析メソッドは、列挙値を DateTimeStyles 暗黙的または明示的に使用して、解析する文字列に存在できるスタイル要素 (先頭、末尾、内側の空白など) と、解析された文字列または欠落している要素を解釈する方法を決定します。 またはTryParseメソッドを呼び出すときに値をParseDateTimeStyles指定しない場合、既定値は DateTimeStyles.AllowWhiteSpaces、フラグDateTimeStyles.AllowInnerWhiteを含むDateTimeStyles.AllowLeadingWhiteDateTimeStyles.AllowTrailingWhite複合スタイルです。 メソッドのParseExact``TryParseExact場合、既定値は ;入力文字列はDateTimeStyles.None、特定のカスタム日付と時刻の書式指定文字列に正確に対応している必要があります。

また、解析メソッドは、解析する文字列内で発生する可能性がある特定のシンボルとパターンを定義するオブジェクトを暗黙的または明示的に使用 DateTimeFormatInfo します。 オブジェクトを指定 DateTimeFormatInfo しない場合、現在のカルチャの DateTimeFormatInfo オブジェクトが既定で使用されます。 日付と時刻の文字列の解析の詳細については、個々の解析メソッド (例: DateTime.Parse, , DateTime.TryParse, DateTimeOffset.ParseExact) DateTimeOffset.TryParseExactを参照してください。

次の例は、日付と時刻の文字列を解析するカルチャに依存する性質を示しています。 en-US、en-GB、fr-FR、および fi-FI カルチャの規則を使用して、2 つの日付文字列を解析しようとします。 en-US カルチャで 2014 年 8 月 18 日と解釈される日付は、18 が月数として解釈されるため、他の 3 つのカルチャでは例外をスロー FormatException します。 2015 年 1 月 2 日は、en-US カルチャでは最初の月の 2 日目として解析されますが、残りのカルチャでは 2 か月目の最初の日として解析されます。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] dateStrings = { "08/18/2014", "01/02/2015" };
      string[] cultureNames = { "en-US", "en-GB", "fr-FR", "fi-FI" };

      foreach (var cultureName in cultureNames) {
         CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
         Console.WriteLine("Parsing strings using the {0} culture.",
                           culture.Name);
         foreach (var dateStr in dateStrings) {
            try {
               Console.WriteLine(String.Format(culture,
                                 "   '{0}' --> {1:D}", dateStr,
                                 DateTime.Parse(dateStr, culture)));
            }
            catch (FormatException) {
               Console.WriteLine("   Unable to parse '{0}'", dateStr);
            }
         }
      }
   }
}
// The example displays the following output:
//       Parsing strings using the en-US culture.
//          '08/18/2014' --> Monday, August 18, 2014
//          '01/02/2015' --> Friday, January 02, 2015
//       Parsing strings using the en-GB culture.
//          Unable to parse '08/18/2014'
//          '01/02/2015' --> 01 February 2015
//       Parsing strings using the fr-FR culture.
//          Unable to parse '08/18/2014'
//          '01/02/2015' --> dimanche 1 février 2015
//       Parsing strings using the fi-FI culture.
//          Unable to parse '08/18/2014'
//          '01/02/2015' --> 1. helmikuuta 2015
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim dateStrings() As String = { "08/18/2014", "01/02/2015" }
      Dim cultureNames() As String = { "en-US", "en-GB", "fr-FR", "fi-FI" }
      
      For Each cultureName In cultureNames
         Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
         Console.WriteLine("Parsing strings using the {0} culture.", 
                           culture.Name)
         For Each dateStr In dateStrings
            Try
               Console.WriteLine(String.Format(culture, 
                                 "   '{0}' --> {1:D}", dateStr, 
                                 DateTime.Parse(dateStr, culture)))
            Catch e As FormatException
               Console.WriteLine("   Unable to parse '{0}'", dateStr)
            End Try
         Next
      Next
   End Sub
End Module
' The example displays the following output:
'       Parsing strings using the en-US culture.
'          '08/18/2014' --> Monday, August 18, 2014
'          '01/02/2015' --> Friday, January 02, 2015
'       Parsing strings using the en-GB culture.
'          Unable to parse '08/18/2014'
'          '01/02/2015' --> 01 February 2015
'       Parsing strings using the fr-FR culture.
'          Unable to parse '08/18/2014'
'          '01/02/2015' --> dimanche 1 février 2015
'       Parsing strings using the fi-FI culture.
'          Unable to parse '08/18/2014'
'          '01/02/2015' --> 1. helmikuuta 2015

日付と時刻の文字列は、通常、次の 2 つの理由で解析されます。

  • ユーザー入力を日付と時刻の値に変換します。

  • 日付と時刻の値をラウンドトリップする。つまり、以前に文字列としてシリアル化された日付と時刻の値を逆シリアル化します。

次のセクションでは、これら 2 つの操作について詳しく説明します。

ユーザー文字列の解析

ユーザーが入力した日付と時刻の文字列を解析するときは、ユーザーが行った可能性のあるカスタマイズを含め、ユーザーのカルチャ設定を反映するオブジェクトを常にインスタンス化 DateTimeFormatInfo する必要があります。 それ以外の場合、日付と時刻オブジェクトの値が正しくない可能性があります。 ユーザーカルチャのカスタマイズを反映するオブジェクトを DateTimeFormatInfo インスタンス化する方法については、「 DateTimeFormatInfo」および「動的データ 」セクションを参照してください。

次の例は、ユーザーカルチャ設定を反映する解析操作と反映されない解析操作の違いを示しています。 この場合、既定のシステム カルチャは en-US ですが、ユーザーは コントロール パネル、Region、Language を使用して、短い日付パターンを既定の "M/d/yyyy" から "yy/MM/dd" に変更しています。 ユーザーがユーザー設定を反映する文字列を入力し、ユーザー設定も反映するオブジェクトによって DateTimeFormatInfo 文字列が解析されると (オーバーライド)、解析操作は正しい結果を返します。 ただし、文字列が標準の en-US カルチャ設定を反映するオブジェクトによって DateTimeFormatInfo 解析されると、解析メソッドは 14 を年の最後の 2 桁ではなく月の数として解釈するため、例外をスロー FormatException します。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string inputDate = "14/05/10";

      CultureInfo[] cultures = { CultureInfo.GetCultureInfo("en-US"),
                                 CultureInfo.CreateSpecificCulture("en-US") };

      foreach (var culture in cultures) {
         try {
            Console.WriteLine("{0} culture reflects user overrides: {1}",
                              culture.Name, culture.UseUserOverride);
            DateTime occasion = DateTime.Parse(inputDate, culture);
            Console.WriteLine("'{0}' --> {1}", inputDate,
                              occasion.ToString("D", CultureInfo.InvariantCulture));
         }
         catch (FormatException) {
            Console.WriteLine("Unable to parse '{0}'", inputDate);
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       en-US culture reflects user overrides: False
//       Unable to parse '14/05/10'
//
//       en-US culture reflects user overrides: True
//       '14/05/10' --> Saturday, 10 May 2014
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim inputDate As String = "14/05/10"
      
      Dim cultures() As CultureInfo = { CultureInfo.GetCultureInfo("en-US"), 
                                        CultureInfo.CreateSpecificCulture("en-US") }
      
      For Each culture In cultures
         Try
            Console.WriteLine("{0} culture reflects user overrides: {1}", 
                              culture.Name, culture.UseUserOverride)
            Dim occasion As DateTime = DateTime.Parse(inputDate, culture)
            Console.WriteLine("'{0}' --> {1}", inputDate, 
                              occasion.ToString("D", CultureInfo.InvariantCulture))
         Catch e As FormatException
            Console.WriteLine("Unable to parse '{0}'", inputDate)                           
         End Try   
         Console.WriteLine()  
      Next
   End Sub
End Module
' The example displays the following output:
'       en-US culture reflects user overrides: False
'       Unable to parse '14/05/10'
'       
'       en-US culture reflects user overrides: True
'       '14/05/10' --> Saturday, 10 May 2014

日付と時刻データのシリアル化と逆シリアル化

シリアル化された日付と時刻のデータはラウンドトリップする必要があります。つまり、シリアル化された値と逆シリアル化された値はすべて同じである必要があります。 日付と時刻の値が 1 つの時点を表す場合、逆シリアル化された値は、復元されたシステムのカルチャまたはタイム ゾーンに関係なく、同じ瞬間を表す必要があります。 日付と時刻のデータをラウンドトリップするには、プロパティによって InvariantInfo 返されるインバリアント カルチャの規則を使用して、データを生成して解析する必要があります。 書式設定と解析の操作では、既定のカルチャの規則を反映しないでください。 既定のカルチャ設定を使用する場合、データの移植性は厳密に制限されます。カルチャ固有の設定がシリアル化されたスレッドと同じスレッドでのみ、正常に逆シリアル化できます。 場合によっては、同じシステムでデータを正常にシリアル化および逆シリアル化できない場合もあります。

日付と時刻の値の時刻要素が有効な場合は、UTC に変換し、"o" または "r" 標準書式指定文字列を使用してシリアル化する必要もあります。 時間データを復元するには、解析メソッドを呼び出し、それを引数としてインバリアント カルチャと共に適切な書式指定文字列を provider 渡します。

次の例は、日付と時刻の値をラウンドトリップするプロセスを示しています。 これは、米国太平洋時間を観察し、現在のカルチャが en-US であるシステムで日付と時刻をシリアル化します。

using System;
using System.Globalization;
using System.IO;

public class Example
{
   public static void Main()
   {
      StreamWriter sw = new StreamWriter(@".\DateData.dat");
      // Define a date and time to serialize.
      DateTime originalDate = new DateTime(2014, 08, 18, 08, 16, 35);
      // Display information on the date and time.
      Console.WriteLine("Date to serialize: {0:F}", originalDate);
      Console.WriteLine("Current Culture:   {0}",
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("Time Zone:         {0}",
                        TimeZoneInfo.Local.DisplayName);
      // Convert the date value to UTC.
      DateTime utcDate = originalDate.ToUniversalTime();
      // Serialize the UTC value.
      sw.Write(utcDate.ToString("o", DateTimeFormatInfo.InvariantInfo));
      sw.Close();
   }
}
// The example displays the following output:
//       Date to serialize: Monday, August 18, 2014 8:16:35 AM
//       Current Culture:   en-US
//       Time Zone:         (UTC-08:00) Pacific Time (US & Canada)
Imports System.Globalization
Imports System.IO

Module Example
   Public Sub Main()
      Dim sw As New StreamWriter(".\DateData.dat")
      ' Define a date and time to serialize.
      Dim originalDate As New Date(2014, 08, 18, 08, 16, 35)
      ' Display information on the date and time.
      Console.WriteLine("Date to serialize: {0:F}", originalDate)
      Console.WriteLine("Current Culture:   {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("Time Zone:         {0}", 
                        TimeZoneInfo.Local.DisplayName)
      ' Convert the date value to UTC.
      Dim utcDate As Date = originalDate.ToUniversalTime()
      ' Serialize the UTC value.
      sw.Write(utcDate.ToString("o", DateTimeFormatInfo.InvariantInfo))
      sw.Close()
   End Sub
End Module
' The example displays the following output:
'       Date to serialize: Monday, August 18, 2014 8:16:35 AM
'       Current Culture:   en-US
'       Time Zone:         (UTC-08:00) Pacific Time (US & Canada)

ブリュッセル、コペンハーゲン、マドリード、パリのタイム ゾーンで現在のカルチャが fr-FR であるシステム上のデータを逆シリアル化します。 復元日は元の日付より 9 時間遅れています。これは、UTC から 8 時間遅れてから UTC より 1 時間前のタイム ゾーン調整を反映しています。 元の日付と復元された日付の両方が、同じ時点を表します。

using System;
using System.Globalization;
using System.IO;

public class Example
{
   public static void Main()
   {
      // Open the file and retrieve the date string.
      StreamReader sr = new StreamReader(@".\DateData.dat");
      String dateValue = sr.ReadToEnd();

      // Parse the date.
      DateTime parsedDate = DateTime.ParseExact(dateValue, "o",
                            DateTimeFormatInfo.InvariantInfo);
      // Convert it to local time.
      DateTime restoredDate = parsedDate.ToLocalTime();
      // Display information on the date and time.
      Console.WriteLine("Deserialized date: {0:F}", restoredDate);
      Console.WriteLine("Current Culture:   {0}",
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("Time Zone:         {0}",
                        TimeZoneInfo.Local.DisplayName);
   }
}
// The example displays the following output:
//    Deserialized date: lundi 18 août 2014 17:16:35
//    Current Culture:   fr-FR
//    Time Zone:         (UTC+01:00) Brussels, Copenhagen, Madrid, Paris
Imports System.Globalization
Imports System.IO

Module Example
   Public Sub Main()
      ' Open the file and retrieve the date string.
      Dim sr As New StreamReader(".\DateData.dat")             
      Dim dateValue As String = sr.ReadToEnd()
      
      ' Parse the date.
      Dim parsedDate As Date = Date.ParseExact(dateValue, "o", 
                               DateTimeFormatInfo.InvariantInfo)
      ' Convert it to local time.                             
      Dim restoredDate As Date = parsedDate.ToLocalTime()
      ' Display information on the date and time.
      Console.WriteLine("Deserialized date: {0:F}", restoredDate)
      Console.WriteLine("Current Culture:   {0}", 
                        CultureInfo.CurrentCulture.Name)
      Console.WriteLine("Time Zone:         {0}", 
                        TimeZoneInfo.Local.DisplayName)
   End Sub
End Module
' The example displays the following output:
'    Deserialized date: lundi 18 août 2014 17:16:35
'    Current Culture:   fr-FR
'    Time Zone:         (UTC+01:00) Brussels, Copenhagen, Madrid, Paris

コンストラクター

DateTimeFormatInfo()

カルチャに依存しない (インバリアントな) DateTimeFormatInfo クラスの新しい書き込み可能インスタンスを初期化します。

プロパティ

AbbreviatedDayNames

曜日を表すカルチャ固有の省略名を格納している型 String の 1 次元配列を取得または設定します。

AbbreviatedMonthGenitiveNames

現在の DateTimeFormatInfo オブジェクトに関連付けられた月の省略名の文字列配列を取得または設定します。

AbbreviatedMonthNames

月を表すカルチャ固有の省略名を格納している 1 次元配列を取得または設定します。

AMDesignator

"ante meridiem" (午前) の時間の文字列指定子を取得または設定します。

Calendar

現在のカルチャで使用する暦を取得または設定します。

CalendarWeekRule

年の最初の週を判断するために使用する規則を指定する値を取得または設定します。

CurrentInfo

現在のカルチャに基づいて値を形式指定する読み取り専用 DateTimeFormatInfo オブジェクトを取得します。

DateSeparator

日付の構成要素、つまり年、月、および日を区切る文字列を取得または設定します。

DayNames

曜日を表すカルチャ固有の完全名を格納する 1 次元の文字列配列を取得または設定します。

FirstDayOfWeek

週の最初の曜日を取得または設定します。

FullDateTimePattern

長い日付値と長い時刻値のカスタム書式指定文字列を取得または設定します。

InvariantInfo

カルチャに依存しない (インバリアントな) 既定の読み取り専用 DateTimeFormatInfo を取得します。

IsReadOnly

DateTimeFormatInfo オブジェクトが読み取り専用かどうかを示す値を取得します。

LongDatePattern

長い日付値のカスタム書式指定文字列を取得または設定します。

LongTimePattern

長い時刻値のカスタム書式指定文字列を取得または設定します。

MonthDayPattern

月と日の値のカスタム書式指定文字列を取得または設定します。

MonthGenitiveNames

現在の DateTimeFormatInfo オブジェクトに関連付けられた月名の文字列配列を取得または設定します。

MonthNames

月を表すカルチャ固有の完全名を格納している型 String の 1 次元配列を取得または設定します。

NativeCalendarName

現在の DateTimeFormatInfo オブジェクトに関連付けられた暦のネイティブ名を取得します。

PMDesignator

"post meridiem" (午後) の時間の文字列指定子を取得または設定します。

RFC1123Pattern

インターネット技術標準化委員会の (IETF) の Request for Comments (RFC) 1123 仕様に基づく時刻値のカスタム書式指定文字列を取得します。

ShortDatePattern

短い日付値のカスタム書式指定文字列を取得または設定します。

ShortestDayNames

現在の DateTimeFormatInfo オブジェクトに関連付けられた曜日の最も短い一意の省略名の文字列配列を取得または設定します。

ShortTimePattern

短い時刻値のカスタム書式指定文字列を取得または設定します。

SortableDateTimePattern

並べ替え可能な日付と時刻の値のカスタム書式指定文字列を取得します。

TimeSeparator

時刻の構成要素、つまり時間、分、および秒を区切る文字列を取得または設定します。

UniversalSortableDateTimePattern

ISO 8601 での定義に従って、ユニバーサルで並べ替え可能な日付と時刻の文字列のカスタム書式指定文字列を取得します。

YearMonthPattern

年と月の値のカスタム書式指定文字列を取得または設定します。

メソッド

Clone()

DateTimeFormatInfo の簡易コピーを作成します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetAbbreviatedDayName(DayOfWeek)

現在の DateTimeFormatInfo オブジェクトに関連付けられたカルチャに基づいて、指定した曜日のカルチャ固有の省略名を返します。

GetAbbreviatedEraName(Int32)

省略形が存在する場合は、指定した時代 (年号) の省略名を格納している文字列を返します。

GetAbbreviatedMonthName(Int32)

現在の DateTimeFormatInfo オブジェクトに関連付けられたカルチャに基づいて、指定した月のカルチャ固有の省略名を返します。

GetAllDateTimePatterns()

日付と時刻の値を形式指定できるすべての標準パターンを返します。

GetAllDateTimePatterns(Char)

指定された標準書式指定文字列を使用して日付と時刻の値を形式指定できるすべてのパターンを返します。

GetDayName(DayOfWeek)

現在の DateTimeFormatInfo オブジェクトに関連付けられたカルチャに基づいて、指定した曜日のカルチャ固有の完全名を返します。

GetEra(String)

指定した時代 (年号) を表す整数を返します。

GetEraName(Int32)

指定した時代 (年号) の名前を格納している文字列を返します。

GetFormat(Type)

日付と時刻の書式指定サービスを提供する指定した型のオブジェクトを返します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetInstance(IFormatProvider)

指定した DateTimeFormatInfo に関連付けられている IFormatProvider オブジェクトを返します。

GetMonthName(Int32)

現在の DateTimeFormatInfo オブジェクトに関連付けられたカルチャに基づいて、指定した月のカルチャ固有の完全名を返します。

GetShortestDayName(DayOfWeek)

現在の DateTimeFormatInfo オブジェクトに関連付けられた、指定した曜日の最も短い省略名を取得します。

GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ReadOnly(DateTimeFormatInfo)

読み取り専用 DateTimeFormatInfo ラッパーを返します。

SetAllDateTimePatterns(String[], Char)

指定された標準書式指定文字列に対応する、カスタムの日付と時刻の書式指定文字列を設定します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

明示的なインターフェイスの実装

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

SerializationInfo に、対象オブジェクトをシリアル化するために必要なデータを設定します。

適用対象

こちらもご覧ください