개발 이야기/Visual C#2008. 4. 13. 18:29
문자열을 다루때 문자열 형식 지정 및 변환작업을 많이하게된다.
string.Format 형식이 뭐가 있을까? 간단히 바꾸는 방법을 정리해보자.

숫자를 문자열로~~
형식
지정자
이름 설명
0 0 자리 표시자 형식을 지정할 값이 형식 문자열의 '0'이 표시된 위치에 숫자를 가지고 있으면
해당 숫자가 결과 문자열로 복사됩니다.
소수점 앞 가장 왼쪽의 '0'과 소수점 뒤 가장 오른쪽 '0'의 위치는
결과 문자열에 항상 표시될 자릿수의 범위를 결정합니다.
"00" 지정자를 사용하면 해당 값이 소수점 뒤 첫째 자리에서 반올림되며
항상 0 이상의 정수 값으로 표시됩니다. 예를 들어, 34.5의 형식을 "00"으로 지정하면 결과는 35가 됩니다.
# 10진수 자리 표시자 형식을 지정할 값이 형식 문자열의 '#'이 표시된 위치에 숫자를 가지고 있으면
해당 숫자가 결과 문자열로 복사되고, 그렇지 않으면 결과 문자열의 해당 위치에 아무 것도 저장되지 않습니다.
0이 유효 자릿수가 아니면 이 지정자는 문자열에서 '0'이 유일한 숫자라 할지라도
'0'을 표시하지 않습니다. 표시되는 숫자에서 0이 유효 자릿수이면 이 지정자는 '0'을 표시합니다.
"##" 형식 문자열을 사용하면 해당 값이 소수점 뒤 첫째 자리에서 반올림되며
항상 0 이상의 정수로 표시됩니다. 예를 들어, 34.5의 형식을 "##"으로 지정하면 결과는 35가 됩니다.
. 소수점 형식 문자열의 첫 번째 '.' 문자는 형식이 지정될 값에서 소수 구분 기호의 위치를 결정하며, 다른 '.' 문자는 무시됩니다.
소수 구분 기호로 사용되는 실제 문자는 형식 지정을 제어하는 NumberFormatInfo의 NumberDecimalSeparator 속성에 의해 결정됩니다.
, 1000 단위 구분 기호 및 숫자 배율 ',' 문자는 1000 단위 구분 기호 지정자와 숫자 배율 지정자로 사용됩니다.
1000 단위 구분 기호 지정자: 두 개의 10진수 자리 표시자(0 또는 #) 사이에
정수 계열 자릿수의 형식을 지정하는 하나 이상의 ',' 문자가 지정된 경우,
정수 계열 출력 부분의 각 숫자 그룹 사이에 그룹 구분 문자가 삽입됩니다.
현재 NumberFormatInfo 개체의 NumberGroupSeparatorNumberGroupSizes
속성은 숫자 그룹 구분 기호로 사용되는 문자와 각 숫자 그룹의 크기를 결정합니다.
예를 들어, 문자열 "#,#"과 고정 culture를 사용하여 숫자 1000의 형식을 지정할 경우 "1,000"이 출력됩니다.
숫자 배율 지정자: 명시적 또는 암시적 소수점의 바로 왼쪽에 하나 이상의 ',' 문자가 지정된 경우
형식을 지정할 숫자는 숫자 배율 지정자가 나타날 때마다 1000으로 나뉩니다.
예를 들어, 문자열 "0,,"을 사용하여 숫자 100000000의 형식을 지정할 경우 "100"이 출력됩니다.
동일한 형식 문자열에 1000 단위 구분 기호와 숫자 배율 지정자를 함께 사용할 수 있습니다.
예를 들어, 문자열 "#,0,,"과 고정 culture를 사용하여 숫자 1000000000의 형식을 지정할 경우 "1,000"이 출력됩니다.
% 백분율 자리 표시자 형식 문자열에 '%' 문자가 있으면 형식이 지정되기 전에 해당 수에 100이 곱해집니다.
형식 문자열에서 '%'가 표시된 위치에는 숫자 자체에서 적절한 기호가 삽입됩니다.
사용되는 백분율 문자는 현재 NumberFormatInfo 클래스에 의해 결정됩니다.
E0 과학적 표기법 형식 문자열에 "E", "E+", "E-", "e", "e+" 또는 "e-" 문자열이 표시되고 바로 뒤에
적어도 하나의 '0' 문자가 오면, 해당 수와 지수 사이에 'E' 또는 'e'가 삽입되는 과학적 표기법으로 형식이 지정됩니다.
과학적 표기법 표시기 뒤에 오는 '0' 문자의 개수는 이 숫자의 지수로 나타낼 최소 자릿수를 결정합니다.
"E+" 및 "e+" 형식은 기호 문자(더하기나 빼기)가 지수보다 항상 앞에 와야한다는 것을 나타냅니다.
"E", "E-", "e" 또는 "e-" 형식은 기호 문자가 음의 지수 앞에만 온다는 것을 나타냅니다.
E+0
E-0
e0
e+0
e-0
\ 이스케이프 문자 C# 및 C++에서 백슬래시 문자가 오면 형식 문자열의 다음 문자가 이스케이프 시퀀스로 해석됩니다.
이것은 '\n'(새 줄)처럼 전통적인 형식 지정 시퀀스에서 사용합니다.
일부 언어에서 이스케이프 문자를 리터럴로 사용할 때는, 이 이스케이프 문자 앞에 이스케이프 문자를 넣어야 합니다.
그렇지 않으면 컴파일러에서 이 문자를 이스케이프 시퀀스로 해석합니다. '\'를 표시하려면 "\\" 문자열을 사용합니다.
Visual Basic에서는 이 이스케이프 문자를 지원하지 않지만 ControlChars에서 같은 기능을 제공합니다.
'ABC' 리터럴 문자열 작은따옴표나 큰따옴표로 묶은 문자는 결과 문자열에 복사되며 형식 지정에 영향을 주지 않습니다.
"ABC"
; 섹션 구분 기호 ';' 문자는 형식 문자열에서 양수, 음수 및 0 섹션을 구분하는 데 사용됩니다.
기타 다른 모든 문자 다른 모든 문자는 결과 문자열에 복사되며 형식 지정에는 영향을 주지 않습니다.


DateTime 문자열 지정 형식~~

형식
지정자
이름 설명
d 간단한 날짜 패턴 현재 ShortDatePattern 속성으로 정의된 사용자 지정 DateTime 형식 문자열을 나타냅니다.
예를 들어, 고정 culture에 대한 사용자 지정 형식 문자열은 "MM/dd/yyyy"입니다.
D 자세한 날짜 패턴 현재 LongDatePattern 속성으로 정의된 사용자 지정 DateTime 형식 문자열을 나타냅니다.
예를 들어, 고정 culture에 대한 사용자 지정 형식 문자열은 "dddd, dd MMMM yyyy"입니다.
f 전체 날짜/시간 패턴(간단한 시간) 자세한 날짜(D) 패턴과 간단한 시간(t) 패턴을 공백으로 구분하여 조합한 형식을 나타냅니다.
F 전체 날짜/시간 패턴(자세한 시간) 현재 FullDateTimePattern 속성으로 정의된 사용자 지정 DateTime 형식 문자열을 나타냅니다.
예를 들어, 고정 culture에 대한 사용자 지정 형식 문자열은 "dddd, dd MMMM yyyy HH:mm:ss"입니다.
g 일반 날짜/시간 패턴(간단한 시간) 간단한 날짜(d) 패턴과 간단한 시간(t) 패턴을 공백으로 구분하여 조합한 형식을 나타냅니다.
G 일반 날짜/시간 패턴(자세한 시간) 간단한 날짜(d) 패턴과 자세한 시간(t) 패턴을 공백으로 구분하여 조합한 형식을 나타냅니다.
M 또는 m 월 일 패턴 현재 MonthDayPattern 속성으로 정의된 사용자 지정 DateTime 형식 문자열을 나타냅니다.
예를 들어, 고정 culture에 대한 사용자 지정 형식 문자열은 "MMMM dd"입니다.
o 라운드트립 날짜/시간 패턴 표준 시간대 정보를 유지하는 패턴을 사용하여 사용자 지정 DateTime 형식 문자열을 나타냅니다. 이 패턴은 Kind 속성을 포함하여 DateTime 형식을 텍스트로 라운드트립합니다. 그런 다음 형식이 지정된 문자열을 Parse 또는 ParseExact와 올바른 Kind 속성 값을 사용하여 다시 구문 분석할 수 있습니다.
사용자 지정 형식 문자열은 "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK"입니다.
이 지정자의 패턴은 표준으로 정의되어 있습니다. 따라서 이 패턴은 사용된 culture나 제공된 형식 공급자에 관계없이 항상 같습니다.
R 또는 r RFC1123 패턴 현재 RFC1123Pattern 속성으로 정의된 사용자 지정 DateTime 형식 문자열을 나타냅니다. 이 패턴은 표준으로 정의되어 있으며 해당 속성은 읽기 전용입니다. 따라서 이 패턴은 사용된 culture나 제공된 형식 공급자에 관계없이 항상 같습니다.
사용자 지정 형식 문자열은 "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'"입니다.
형식을 지정해도 해당 형식이 지정되는 DateTime 개체의 값은 수정되지 않습니다. 따라서 응용 프로그램에서는 이 형식 지정자를 사용하기 전에 값을 UTC(지역 표준시)로 변환해야 합니다.
s 정렬 가능한 날짜/시간 패턴;
ISO 8601에 부합
현재 SortableDateTimePattern 속성으로 정의된 사용자 지정 DateTime 형식 문자열을 나타냅니다. 이 패턴은 표준으로 정의되어 있으며 해당 속성은 읽기 전용입니다. 따라서 이 패턴은 사용된 culture나 제공된 형식 공급자에 관계없이 항상 같습니다.
사용자 지정 형식 문자열은 "yyyy'-'MM'-'dd'T'HH':'mm':'ss"입니다.
t 간단한 시간 패턴 현재 ShortTimePattern 속성으로 정의된 사용자 지정 DateTime 형식 문자열을 나타냅니다.
예를 들어, 고정 culture에 대한 사용자 지정 형식 문자열은 "HH:mm"입니다.
T 자세한 시간 패턴 현재 LongTimePattern 속성으로 정의된 사용자 지정 DateTime 형식 문자열을 나타냅니다.
예를 들어, 고정 culture에 대한 사용자 지정 형식 문자열은 "HH:mm:ss"입니다.
u 정렬 가능한 유니버설 날짜/시간 패턴 현재 UniversalSortableDateTimePattern 속성으로 정의된 사용자 지정 DateTime 형식 문자열을 나타냅니다. 이 패턴은 표준으로 정의되어 있으며 해당 속성은 읽기 전용입니다. 따라서 이 패턴은 사용된 culture나 제공된 형식 공급자에 관계없이 항상 같습니다.
사용자 지정 형식 문자열은 "yyyy'-'MM'-'dd HH':'mm':'ss'Z"입니다.
날짜 및 시간의 형식이 지정될 때 표준 시간대는 변환되지 않습니다. 따라서 응용 프로그램에서는 이 형식 지정자를 사용하기 전에 현지 날짜 및 시간을 UTC(지역 표준시)로 변환해야 합니다.
U 정렬 가능한 유니버설 날짜/시간 패턴 현재 FullDateTimePattern 속성으로 정의된 사용자 지정 DateTime 형식 문자열을 나타냅니다.
이 패턴은 전체 날짜/자세한 시간(F) 패턴과 동일합니다. 그러나 형식 지정 작업이 형식을 지정할 DateTime 개체에 해당하는 UTC(지역 표준시)에 대해 수행된다는 점이 다릅니다.
Y 또는 y 년 월 패턴 현재 YearMonthPattern 속성으로 정의된 사용자 지정 DateTime 형식 문자열을 나타냅니다.
예를 들어, 고정 culture에 대한 사용자 지정 형식 문자열은 "yyyy MMMM"입니다.
기타 모든 단일 문자 알 수 없는 지정자 알 수 없는 지정자는 런타임 형식 예외를 throw합니다.


예제

 // This code example demonstrates the ToString(String) and
// ToString(String, IFormatProvider) methods for integral and
// floating-point numbers, in conjunction with the standard
// numeric format specifiers.
// This code example uses the System.Int32 integral type and
// the System.Double floating-point type, but would yield
// similar results for any of the numeric types. The integral
// numeric types are System.Byte, SByte, Int16, Int32, Int64,
// UInt16, UInt32, and UInt64. The floating-point numeric types
// are Decimal, Single, and Double.

using System;
using System.Globalization;
using System.Threading;

class Sample
{
    public static void Main()
    {
// Format a negative integer or floating-point number in various ways.
    int    integralVal = -12345;
    double floatingVal = -1234.567d;

    string msgCurrency =    "(C) Currency: . . . . . . ";
    string msgDecimal  =    "(D) Decimal:. . . . . . . ";
    string msgScientific =  "(E) Scientific: . . . . . ";
    string msgFixedPoint =  "(F) Fixed point:. . . . . ";
    string msgGeneral =     "(G) General (default):. . ";
    string msgNumber =      "(N) Number: . . . . . . . ";
    string msgPercent =     "(P) Percent:. . . . . . . ";
    string msgRoundTrip =   "(R) Round-trip: . . . . . ";
    string msgHexadecimal = "(X) Hexadecimal:. . . . . ";

    string msg1 = "Use ToString(String) and the current thread culture.\n";
    string msg2 = "Use ToString(String, IFormatProvider) and a specified culture.\n";
    string msgCulture     = "Culture:";
    string msgIntegralVal = "Integral value:";
    string msgFloatingVal = "Floating-point value:";

    CultureInfo ci;
//
    Console.Clear();
    Console.WriteLine("Standard Numeric Format Specifiers:\n");
// Display the values.
    Console.WriteLine(msg1);

// Display the thread current culture, which is used to format the values.
    ci = Thread.CurrentThread.CurrentCulture;
    Console.WriteLine("{0,-26}{1}", msgCulture, ci.DisplayName);

// Display the integral and floating-point values.
    Console.WriteLine("{0,-26}{1}", msgIntegralVal, integralVal);
    Console.WriteLine("{0,-26}{1}", msgFloatingVal, floatingVal);
    Console.WriteLine();

// Use the format specifiers that are only for integral types.
    Console.WriteLine("Format specifiers only for integral types:");
    Console.WriteLine(msgDecimal     + integralVal.ToString("D"));
    Console.WriteLine(msgHexadecimal + integralVal.ToString("X"));
    Console.WriteLine();

// Use the format specifier that is only for the Single and Double
// floating-point types.
    Console.WriteLine("Format specifier only for the Single and Double types:");
    Console.WriteLine(msgRoundTrip   + floatingVal.ToString("R"));
    Console.WriteLine();

// Use the format specifiers that are for integral or floating-point types.
    Console.WriteLine("Format specifiers for integral or floating-point types:");
    Console.WriteLine(msgCurrency    + floatingVal.ToString("C"));
    Console.WriteLine(msgScientific  + floatingVal.ToString("E"));
    Console.WriteLine(msgFixedPoint  + floatingVal.ToString("F"));
    Console.WriteLine(msgGeneral     + floatingVal.ToString("G"));
    Console.WriteLine(msgNumber      + floatingVal.ToString("N"));
    Console.WriteLine(msgPercent     + floatingVal.ToString("P"));
    Console.WriteLine();

// Display the same values using a CultureInfo object. The CultureInfo class
// implements IFormatProvider.
    Console.WriteLine(msg2);

// Display the culture used to format the values.
// Create a European culture and change its currency symbol to "euro" because
// this particular code example uses a thread current UI culture that cannot
// display the euro symbol (€).
    ci = new CultureInfo("de-DE");
    ci.NumberFormat.CurrencySymbol = "euro";
    Console.WriteLine("{0,-26}{1}", msgCulture, ci.DisplayName);

// Display the integral and floating-point values.
    Console.WriteLine("{0,-26}{1}", msgIntegralVal, integralVal);
    Console.WriteLine("{0,-26}{1}", msgFloatingVal, floatingVal);
    Console.WriteLine();

// Use the format specifiers that are only for integral types.
    Console.WriteLine("Format specifiers only for integral types:");
    Console.WriteLine(msgDecimal     + integralVal.ToString("D", ci));
    Console.WriteLine(msgHexadecimal + integralVal.ToString("X", ci));
    Console.WriteLine();

// Use the format specifier that is only for the Single and Double
// floating-point types.
    Console.WriteLine("Format specifier only for the Single and Double types:");
    Console.WriteLine(msgRoundTrip   + floatingVal.ToString("R", ci));
    Console.WriteLine();

// Use the format specifiers that are for integral or floating-point types.
    Console.WriteLine("Format specifiers for integral or floating-point types:");
    Console.WriteLine(msgCurrency    + floatingVal.ToString("C", ci));
    Console.WriteLine(msgScientific  + floatingVal.ToString("E", ci));
    Console.WriteLine(msgFixedPoint  + floatingVal.ToString("F", ci));
    Console.WriteLine(msgGeneral     + floatingVal.ToString("G", ci));
    Console.WriteLine(msgNumber      + floatingVal.ToString("N", ci));
    Console.WriteLine(msgPercent     + floatingVal.ToString("P", ci));
    Console.WriteLine();
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers:

Use ToString(String) and the current thread culture.

Culture:                  English (United States)
Integral value:           -12345
Floating-point value:     -1234.567

Format specifiers only for integral types:
(D) Decimal:. . . . . . . -12345
(X) Hexadecimal:. . . . . FFFFCFC7

Format specifier only for the Single and Double types:
(R) Round-trip: . . . . . -1234.567

Format specifiers for integral or floating-point types:
(C) Currency: . . . . . . ($1,234.57)
(E) Scientific: . . . . . -1.234567E+003
(F) Fixed point:. . . . . -1234.57
(G) General (default):. . -1234.567
(N) Number: . . . . . . . -1,234.57
(P) Percent:. . . . . . . -123,456.70 %

Use ToString(String, IFormatProvider) and a specified culture.

Culture:                  German (Germany)
Integral value:           -12345
Floating-point value:     -1234.567

Format specifiers only for integral types:
(D) Decimal:. . . . . . . -12345
(X) Hexadecimal:. . . . . FFFFCFC7

Format specifier only for the Single and Double types:
(R) Round-trip: . . . . . -1234,567

Format specifiers for integral or floating-point types:
(C) Currency: . . . . . . -1.234,57 euro
(E) Scientific: . . . . . -1,234567E+003
(F) Fixed point:. . . . . -1234,57
(G) General (default):. . -1234,567
(N) Number: . . . . . . . -1.234,57
(P) Percent:. . . . . . . -123.456,70%

*/


출처 : http://msdn.microsoft.com/ko-kr/library/fht0f5be(VS.80).aspx
Posted by 사나에