출처 : http://www.dotnetperls.com/datetime-format
C#에서 사용되는 Datetime 날짜와 시간으로 표기된 시간으로서 선언 되어 있습니다.
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 포맷으로 구현되어있습니다.