본문 바로가기

Software/dotnetperls.com

C# DateTime Format ( C#의 날짜 포맷 )

반응형

출처 : http://www.dotnetperls.com/datetime-format

 

C#에서 사용되는 Datetime  날짜와 시간으로 표기된 시간으로서 선언 되어 있습니다.

 

[SerializableAttribute]
public struct DateTime : IComparable, IFormattable
IConvertible, ISerializable, IComparable<DateTime>, IEquatable<DateTime>

 

여기서 선언된 시간은 'ToString' 을 사용하여 다양한 형식으로 사용 될 수 있습니다. 이러한 사용이 가능 한것은 IFormattable  인페이스가 구현이 되어서 가능 합니다. ( IFormattable 참조 )

 

using System;
using System.Globalization;

public class Temperature : IFormattable
{
   private decimal temp;

   public Temperature(decimal temperature)
   {
      if (temperature < -273.15m) 
        throw new ArgumentOutOfRangeException(String.Format("{0} is less than absolute zero.", 
                                              temperature));
      this.temp = temperature;
   }

   public decimal Celsius
   {
      get { return temp; }
   }

   public decimal Fahrenheit
   {
      get { return temp * 9 / 5 + 32; }
   }

   public decimal Kelvin
   {
      get { return temp + 273.15m; }
   }

   public override string ToString()
   {
      return this.ToString("G", CultureInfo.CurrentCulture);
   }

   public string ToString(string format)
   {
      return this.ToString(format, CultureInfo.CurrentCulture);
   }

   public string ToString(string format, IFormatProvider provider) 
   {
      if (String.IsNullOrEmpty(format)) format = "G";
      if (provider == null) provider = CultureInfo.CurrentCulture;

      switch (format.ToUpperInvariant())
      {
         case "G":
         case "C":
            return temp.ToString("F2", provider) + " °C"; 
         case "F":
            return Fahrenheit.ToString("F2", provider) + " °F";
         case "K":
            return Kelvin.ToString("F2", provider) + " K";
         default:
            throw new FormatException(String.Format("The {0} format string is not supported.", format));
      }
   }
}

 

 

public class Example
{
   public static void Main()
   {
      // Use composite formatting with format string in the format item.
      Temperature temp1 = new Temperature(0);
      Console.WriteLine("{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)\n", temp1);

      // Use composite formatting with a format provider.
      temp1 = new Temperature(-40);
      Console.WriteLine(String.Format(CultureInfo.CurrentCulture, "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)", temp1));
      Console.WriteLine(String.Format(new CultureInfo("fr-FR"), "{0:C} (Celsius) = {0:K} (Kelvin) = {0:F} (Fahrenheit)\n", temp1));

      // Call ToString method with format string.
      temp1 = new Temperature(32);
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)\n", 
                        temp1.ToString("C"), temp1.ToString("K"), temp1.ToString("F"));

      // Call ToString with format string and format provider
      temp1 = new Temperature(100)      ;
      NumberFormatInfo current = NumberFormatInfo.CurrentInfo;
      CultureInfo nl = new CultureInfo("nl-NL"); 
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)", 
                        temp1.ToString("C", current), temp1.ToString("K", current), temp1.ToString("F", current));
      Console.WriteLine("{0} (Celsius) = {1} (Kelvin) = {2} (Fahrenheit)", 
                        temp1.ToString("C", nl), temp1.ToString("K", nl), temp1.ToString("F", nl));
   }
}
// The example displays the following output:
//    0.00 °C (Celsius) = 273.15 K (Kelvin) = 32.00 °F (Fahrenheit)
//    
//    -40.00 °C (Celsius) = 233.15 K (Kelvin) = -40.00 °F (Fahrenheit)
//    -40,00 °C (Celsius) = 233,15 K (Kelvin) = -40,00 °F (Fahrenheit)
//    
//    32.00 °C (Celsius) = 305.15 K (Kelvin) = 89.60 °F (Fahrenheit)
//    
//    100.00 °C (Celsius) = 373.15 K (Kelvin) = 212.00 °F (Fahrenheit)
//    100,00 °C (Celsius) = 373,15 K (Kelvin) = 212,00 °F (Fahrenheit)

 

 

 

출처 : http://msdn.microsoft.com/ko-kr/library/system.iformattable.aspx

 

위의 코드에도 나와있는 것처럼 IFormattable 을 Temperature 에 구현하여 섭씨, 화씨, 켈빈 형식으로 표현 가능하도록 되어있습니다.

 

Datetime 에도 위의 방법과 같이 IFormattable 이 구현되어 있기 때문에 다양한 형식으로 사용이 가능합니다.

 

 

1개의 문자로 처리된 DateTime 포맷

1개의 문자로서 포맷을 처리하기 때문에,  코딩시의 실수하여  잘못된 형식 출력되는 것을  방지 할 수 있습니다.

( 다만, 이러한 포맷의 형식을 다 외우는 것은 무의미한 일이기 때문에, 지정된 형식을 찾아볼 수 있는 곳을 알아 두는 곳이 더 유용 합니다. )

 

    class Program
    {
        static void Main()
        {
            DateTime now = DateTime.Now;
            Console.WriteLine(now.ToString("d"));
            Console.WriteLine(now.ToString("D"));
            Console.WriteLine(now.ToString("f"));
            Console.WriteLine(now.ToString("F"));
            Console.WriteLine(now.ToString("g"));
            Console.WriteLine(now.ToString("G"));
            Console.WriteLine(now.ToString("m"));
            Console.WriteLine(now.ToString("M"));
            Console.WriteLine(now.ToString("o"));
            Console.WriteLine(now.ToString("O"));
            Console.WriteLine(now.ToString("s"));
            Console.WriteLine(now.ToString("t"));
            Console.WriteLine(now.ToString("T"));
            Console.WriteLine(now.ToString("u"));
            Console.WriteLine(now.ToString("U"));
            Console.WriteLine(now.ToString("y"));
            Console.WriteLine(now.ToString("Y"));


            Console.ReadLine();
        }
    }

 

출력은 아래와 같습니다.

 

 

 d

D

f

F

g

G

m

M

o

O

s

t

T

u

U

y

Y

2012-07-02

2012년 7월 2일 월요일

2012년 7월 2일 월요일 오후 7:59

2012년 7월 2일 월요일 오후 7:59:56

2012-07-02 오후 7:59

2012-07-02 오후 7:59:56

7월 2일

7월 2일

2012-07-02T19:59:56.0917411+09:00

2012-07-02T19:59:56.0917411+09:00

2012-07-02T19:59:56

오후 7:59

오후 7:59:56

2012-07-02 19:59:56Z

2012년 7월 2일 월요일 오전 10:59:56

2012년 7월

2012년 7월

 

 

문자열로 처리된 DateTime 포맷

아래 그림과 같이, ToLongDateString, ToLongTimeString, ToShortDateString, ToShortTimeString 는 DateTime 포맷으로 구현되어있습니다.

 

 

 

 

반응형