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 の情報が含まれます。

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

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

  • 週の日の名前。

  • 年の月の名前。

  • The A.M. 午後の時刻の 時間値で使用される指定子。

  • 日付を表すカレンダー。

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

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.Parent DateTimeFormatInfo を取得 CultureInfo.DateTimeFormat できます。 親カルチャがインバリアント カルチャを表す場合を指定しない限り、返されるオブジェクト 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

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

次のようなコードを使用して、ニュートラル カルチャが表す特定のカルチャの書式設定規則を決定できます。 この例では、リフレクションを使用して、ニュートラル カルチャのプロパティと特定の子カルチャ 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、ユーザーは、コントロール パネル の Region および Language アプリケーションを使用して、書式設定および解析操作で使用されるプロパティ値の一 DateTimeFormatInfo 部をオーバーライドできます。 たとえば、カルチャが英語 (米国) のユーザーは、既定の 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 です。 特定のオブジェクトに関連付けられているオブジェクトの値の安定性について DateTimeFormatInfo 、想定を行う必要 CultureInfo があります。 インバリアント カルチャとその関連オブジェクトによって提供されるデータ DateTimeFormatInfo だけが安定しています。 その他のデータは、アプリケーション セッション間、またはアプリケーションの実行中でも変更される可能性があります。 変更の主なソースは次の 4 つがあります。

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

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

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

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

一貫性のないデータの可能性を最小限に抑えるために、オブジェクトの作成時に、オブジェクトのユーザーがオーバーライドできるすべてのプロパティ 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 、という1つのメソッドが含まれてい IFormatProvider.GetFormat(Type) ます。 このコールバックメソッドには、 Type 書式設定情報を提供するために必要な型を表すオブジェクトが渡されます。 メソッドは、その型のインスタンスを返すか null 、型のインスタンスを提供できない場合はを返します。 .NET Framework には、 IFormatProvider 日付と時刻を書式設定するための2つの実装が含まれています。

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

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

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 び出して、結果文字列に時代 (年号) 名を挿入します。
"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. 書式設定メソッドの DateTimeFormatInfo 呼び出しで引数 IFormatProvider として作成したカスタム オブジェクトを使用します。

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

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

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

短い日付パターンの変更

次の例では、"d" (短い日付) 標準書式指定文字列によって生成される結果文字列の形式を変更します。 en-US または English (米国) カルチャに関連付けられているプロパティを既定の 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

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

12 時間形式から 24 時間形式への変更

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

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]+)$ グループに一致する場合は、文字 "h" を 1 回以上一致し、その後に "h" でも "t" でもない 1 つ以上の文字 openAMPM を続け取る必要があります。 一致は文字列の末尾で終了します。 "h" の後にキャプチャされた文字はすべて、 という名前のキャプチャ グループに含まれます nonHours
&#124; \s*h+(?<nonHours>[^ht]+)\s*t+) グループに一致しない場合は、文字 "h" を 1 回以上一致し、その後に "h" でも "t" でもない 1 つ以上の文字を続け、その後に 0 個以上の空白文字を続け取ります。 openAMPM 最後に、文字 "t" の 1 つ以上の出現箇所と一致します。 "h" の後、および空白文字と "t" の前にキャプチャされた文字はすべて、 という名前のキャプチャ グループに含まれます nonHours

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

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

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

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

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

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

この例では、カレンダーに時代 (年号) が 1 つ含むカルチャの時代 (年号) の名前を変更する方法も示しています。 この場合、en-US カルチャではグレゴリオ暦が使用されます。グレゴリオ暦は オブジェクトによって表 GregorianCalendar されます。 クラス GregorianCalendar は、A.D. という名前の単一の時代 (年号) をサポートしています。 (Anno Domini)。 この例では、時代 (年号) の名前を C.E に変更します。 (Common Era) プロパティに割り当てられた書式指定文字列の "g" カスタム書式指定子を FullDateTimePattern リテラル文字列に置き換えます。 通常、時代 (年号) 名は、.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

日付と時刻文字列の解析

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

解析メソッドは、列挙値を暗黙的または明示的に使用して、解析する文字列内に存在できるスタイル要素 (先頭、末尾、内部空白など) と、解析された文字列または不足している要素を解釈する方法を決定します。 DateTimeStyles メソッドまたは メソッドを呼び出す際に値を指定しない場合、既定値は です。これは、および フラグを含む複合 DateTimeStyles Parse TryParse DateTimeStyles.AllowWhiteSpaces DateTimeStyles.AllowLeadingWhite スタイル DateTimeStyles.AllowTrailingWhite DateTimeStyles.AllowInnerWhite です。 メソッドと メソッドの場合、既定値は です。入力文字列は、特定のカスタム日時書式指定文字列に正確 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 の文化設定を反映するオブジェクトによって解析された場合、解析メソッドは、年の最後の 2 桁ではなく月の数として DateTimeFormatInfo 14 を解釈するために例外をスローします。 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 に、対象オブジェクトをシリアル化するために必要なデータを設定します。

適用対象

こちらもご覧ください