.NET에서 날짜 및 시간 문자열 구문 분석Parsing Date and Time Strings in .NET

문자열을 구문 분석하여 DateTime 개체로 변환하려면 날짜 및 시간을 텍스트로 나타내는 방법에 대한 정보를 지정해야 합니다.Parsing strings to convert them to DateTime objects requires you to specify information about how the dates and times are represented as text. 문화권에 따라 일, 월 및 연도의 순서를 다르게 사용합니다.Different cultures use different orders for day, month, and year. 시간 표현에서는 24시간제를 사용하는 경우도 있고 “AM”과 “PM”을 지정하기도 합니다.Some time representations use a 24-hour clock, others specify "AM" and "PM." 애플리케이션에 따라서는 날짜만 필요하거나Some applications need only the date. 시간만 필요한 경우도 있고,Others need only the time. 날짜와 시간을 모두 지정해야 하는 경우도 있습니다.Still others need to specify both the date and the time. 문자열을 DateTime 개체로 변환하는 방법을 통해 필요한 형식과 애플리케이션에 필요한 날짜 및 시간의 요소에 대한 자세한 정보를 제공할 수 있습니다.The methods that convert strings to DateTime objects enable you to provide detailed information about the formats you expect and the elements of a date and time your application needs. 텍스트를 DateTime으로 올바로 변환하려면 다음 세 가지 하위 작업을 수행해야 합니다.There are three subtasks to correctly converting text into a DateTime:

  1. 날짜 및 시간을 나타내는 텍스트에 필요한 형식을 지정해야 합니다.You must specify the expected format of the text representing a date and time.
  2. 날짜 시간 형식의 문화권을 지정할 수 있습니다.You may specify the culture for the format of a date time.
  3. 텍스트 표현에서 누락된 구성 요소를 날짜 및 시간으로 설정하는 방법을 지정할 수 있습니다.You may specify how missing components in the text representation are set in the date and time.

ParseTryParse 메서드는 날짜 및 시간의 여러 공통된 표현을 변환합니다.The Parse and TryParse methods convert many common representations of a date and time. ParseExactTryParseExact 메서드는 날짜 및 시간 형식 문자열에 지정된 패턴을 따르는 문자열 표현을 변환합니다.The ParseExact and TryParseExact methods convert a string representation that conforms to the pattern specified by a date and time format string. 자세한 내용은 표준 날짜 및 시간 형식 문자열사용자 지정 날짜 및 시간 형식 문자열의 문서를 참조하세요.(See the articles on standard date and time format strings and custom date and time format strings for details.)

현재 DateTimeFormatInfo 개체를 사용하면 텍스트를 날짜 및 시간으로 해석하는 방법을 더 세밀하게 제어할 수 있습니다.The current DateTimeFormatInfo object provides more control over how text should be interpreted as a date and time. DateTimeFormatInfo의 속성은 날짜 및 시간 구분 기호, 월, 일 및 연대의 이름, “AM” 및 “PM” 지정의 형식을 설명합니다.Properties of a DateTimeFormatInfo describe the date and time separators, and the names of months, days, and eras, and the format for the "AM" and "PM" designations. 현재 스레드 문화권에서는 현재 문화권을 나타내는 DateTimeFormatInfo를 제공합니다.The current thread culture provides a DateTimeFormatInfo that represents the current culture. 특정 문화권 또는 사용자 지정 설정이 필요한 경우 구문 분석 메서드의 IFormatProvider 매개 변수를 지정합니다.If you want a specific culture or custom settings, you specify the IFormatProvider parameter of a parsing method. IFormatProvider 매개 변수의 경우 문화권을 나타내는 CultureInfo 개체나 DateTimeFormatInfo 개체를 지정해야 합니다.For the IFormatProvider parameter, specify a CultureInfo object, which represents a culture, or a DateTimeFormatInfo object.

날짜 또는 시간을 나타내는 텍스트에 일부 정보가 누락될 수 있습니다.The text representing a date or time may be missing some information. 예를 들어 대부분의 사람은 날짜 “3월 12일”이 현재 연도를 나타낸다고 간주합니다.For example, most people would assume the date "March 12" represents the current year. 마찬가지로 “2018년 3월”은 2018년의 3월을 나타냅니다.Similarly, "March 2018" represents the month of March in the year 2018. 시간을 나타내는 텍스트는 시간, 분 및 AM/PM 지정만 포함하는 경우가 많습니다.Text representing time often does only includes hours, minutes, and an AM/PM designation. 구문 분석 메서드는 적절한 기본값을 사용하여 이러한 누락된 정보를 처리합니다.Parsing methods handle this missing information by using reasonable defaults:

  • 시간만 있으면 날짜 부분은 현재 날짜를 사용합니다.When only the time is present, the date portion uses the current date.
  • 날짜만 있으면 시간 부분은 자정입니다.When only the date is present, the time portion is midnight.
  • 날짜에서 연도를 지정하지 않으면 현재 연도가 사용됩니다.When the year isn't specified in a date, the current year is used.
  • 일을 지정하지 않으면 해당 월의 1일이 사용됩니다.When the day of the month isn't specified, the first of the month is used.

문자열에 날짜가 있으면 월과 일 또는 연도 중 하나를 포함해야 합니다.If the date is present in the string, it must include the month and one of the day or year. 시간이 있으면 시와 분 또는 AM/PM 지정자 중 하나를 포함해야 합니다.If the time is present, it must include the hour, and either the minutes or the AM/PM designator.

NoCurrentDateDefault 상수를 지정하여 이러한 기본값을 재정의할 수 있습니다.You can specify the NoCurrentDateDefault constant to override these defaults. 이 상수를 사용하면 누락된 연도, 월 또는 일 속성이 값 1로 설정됩니다.When you use that constant, any missing year, month, or day properties are set to the value 1. Parse를 사용하는 마지막 예제에서 이 동작을 보여줍니다.The last example using Parse demonstrates this behavior.

날짜 및 시간 구성 요소 외에도 날짜 및 시간의 문자열 표현은 시간이 UTC(협정 세계시)와 얼마나 다른지를 나타내는 오프셋을 포함할 수 있습니다.In addition to a date and a time component, the string representation of a date and time can include an offset that indicates how much the time differs from Coordinated Universal Time (UTC). 예를 들어, 문자열 "2/14/2007 5:32:00 -7:00"는 UTC보다 7시간 이전인 시간을 가리킵니다.For example, the string "2/14/2007 5:32:00 -7:00" defines a time that is seven hours earlier than UTC. 시간의 문자열 표현에서 오프셋을 생략하면 구문 분석은 해당 Kind 속성이 DateTimeKind.Unspecified로 설정된 DateTime 개체를 반환합니다.If an offset is omitted from the string representation of a time, parsing returns a DateTime object with its Kind property set to DateTimeKind.Unspecified. 오프셋을 지정하면 구문 분석은 Kind 속성이 DateTimeKind.Local로 설정되고 해당 값이 컴퓨터의 로컬 표준 시간대로 조정된 DateTime 개체를 반환합니다.If an offset is specified, parsing returns a DateTime object with its Kind property set to DateTimeKind.Local and its value adjusted to the local time zone of your machine. 구문 분석 메서드에서 DateTimeStyles 값을 사용하여 이 동작을 수정할 수 있습니다.You can modify this behavior by using a DateTimeStyles value with the parsing method.

서식 공급자는 모호한 날짜를 해석하는 데에도 사용됩니다.The format provider is also used to interpret an ambiguous numeric date. “02/03/04” 문자열에서 나타내는 날짜의 구성 요소 중 무엇이 월, 일 및 연도인지가 명확하지 않습니다.It is not clear which components of the date represented by the string "02/03/04" are the month, day, and year. 이들 구성 요소는 형식 공급자에서 비슷한 날짜 형식의 순서에 따라 해석됩니다.The components are interpreted according to the order of similar date formats in the format provider.

ParseParse

다음 예제에서는 DateTime.Parse 메서드를 사용하여 stringDateTime으로 변환하는 방법을 설명합니다.The following example illustrates the use of the DateTime.Parse method to convert a string into a DateTime. 이 예제는 현재 스레드와 연결된 문화권을 사용합니다.This example uses the culture associated with the current thread. 현재 문화권과 연결된 CultureInfo가 입력 문자열을 구문 분석할 수 없는 경우 FormatException이 throw됩니다.If the CultureInfo associated with the current culture cannot parse the input string, a FormatException is thrown.

이 문서의 모든 C# 샘플은 브라우저에서 실행됩니다.All the C# samples in this article run in your browser. 실행 단추를 눌러 출력을 볼 수 있습니다.Press the Run button to see the output. 편집해서 직접 실험할 수도 있습니다.You can also edit them to experiment yourself.

참고

이러한 예제는 GitHub 문서 리포지토리에서 C#VB용으로 제공됩니다.These examples are available in the GitHub docs repo for both C# and VB. 또는 C# 또는 VB용 zip 파일로 프로젝트를 다운로드할 수 있습니다.Or you can download the project as a zipfile for C# or VB.

string dateInput = "Jan 1, 2009";
DateTime parsedDate = DateTime.Parse(dateInput);
Console.WriteLine(parsedDate);
// Displays the following output on a system whose culture is en-US:
//       1/1/2009 12:00:00 AM
Dim MyString As String = "Jan 1, 2009"
Dim MyDateTime As DateTime = DateTime.Parse(MyString)
Console.WriteLine(MyDateTime)
' Displays the following output on a system whose culture is en-US:
'       1/1/2009 12:00:00 AM

문자열을 구문 분석할 때 어느 문화권의 서식 규칙을 사용할지 명시적으로 정의할 수도 있습니다.You can also explicitly define the culture whose formatting conventions are used when you parse a string. 즉, CultureInfo.DateTimeFormat 속성에서 반환하는 표준 DateTimeFormatInfo 개체 중 하나를 지정합니다.You specify one of the standard DateTimeFormatInfo objects returned by the CultureInfo.DateTimeFormat property. 다음 예제에서는 형식 공급자를 사용하여 독일어 문자열을 DateTime으로 구문 분석합니다.The following example uses a format provider to parse a German string into a DateTime. 여기서는 de-DE 문화권을 나타내는 CultureInfo를 만듭니다.It creates a CultureInfo representing the de-DE culture. CultureInfo 개체는 이 특정 문자열이 성공적으로 구문 분석되도록 합니다.That CultureInfo object ensures successful parsing of this particular string. 그러면 CurrentThreadCurrentCulture에 있는 모든 설정이 불가능합니다.This precludes whatever setting is in the CurrentCulture of the CurrentThread.

CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2008";
DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo);
Console.WriteLine(MyDateTime);
// The example displays the following output:
//       6/12/2008 12:00:00 AM
Dim MyCultureInfo As New CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2008"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo)
Console.WriteLine(MyDateTime)
' The example displays the following output:
'       6/12/2008 12:00:00 AM

그러나 Parse 메서드의 오버로드를 사용하여 사용자 지정 형식 공급자를 지정할 수는 있지만, 이 메서드는 비표준 형식의 구문 분석을 지원하지 않습니다.However, although you can use overloads of the Parse method to specify custom format providers, the method does not support parsing non-standard formats. 비표준 서식으로 표현된 날짜 및 시간을 구문 분석하려면 대신 ParseExact 메서드를 사용합니다.To parse a date and time expressed in a non-standard format, use the ParseExact method instead.

다음 예제에서는 DateTimeStyles 열거형을 사용하여 지정되지 않은 필드의 DateTime에 현재 날짜 및 시간 정보를 추가하지 않도록 지정합니다.The following example uses the DateTimeStyles enumeration to specify that the current date and time information should not be added to the DateTime for unspecified fields.

CultureInfo MyCultureInfo = new CultureInfo("de-DE");
string MyString = "12 Juni 2008";
DateTime MyDateTime = DateTime.Parse(MyString, MyCultureInfo,
                                     DateTimeStyles.NoCurrentDateDefault);
Console.WriteLine(MyDateTime);
// The example displays the following output if the current culture is en-US:
//      6/12/2008 12:00:00 AM
Dim MyCultureInfo As New CultureInfo("de-DE")
Dim MyString As String = "12 Juni 2008"
Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo,
                           DateTimeStyles.NoCurrentDateDefault)
Console.WriteLine(MyDateTime)
' The example displays the following output if the current culture is en-US:
'       6/12/2008 12:00:00 AM

ParseExactParseExact

DateTime.ParseExact 메서드는 지정된 문자열 패턴 중 하나를 따르는 문자열을 DateTime 개체로 변환합니다.The DateTime.ParseExact method converts a string to a DateTime object if it conforms to one of the specified string patterns. 지정된 형식 중 하나가 아닌 문자열을 이 메서드에 전달하면 FormatException이 throw됩니다.When a string that is not one of the forms specified is passed to this method, a FormatException is thrown. 표준 날짜 및 시간 형식 지정자 또는 사용자 지정 형식 지정자의 조합 중 하나를 지정할 수 있습니다.You can specify one of the standard date and time format specifiers or a combination of the custom format specifiers. 사용자 지정 서식 지정자를 사용하면 사용자 지정 문자열을 생성할 수 있습니다.Using the custom format specifiers, it is possible for you to construct a custom recognition string. 지정자에 대한 설명은 표준 날짜 및 시간 서식 문자열사용자 지정 날짜 및 시간 서식 문자열의 항목을 참조하세요.For an explanation of the specifiers, see the topics on standard date and time format strings and custom date and time format strings.

다음 예제에서 DateTime.ParseExact 메서드는 구문 분석할 문자열 개체 뒤에 형식 지정자와 CultureInfo 개체를 전달합니다.In the following example, the DateTime.ParseExact method is passed a string object to parse, followed by a format specifier, followed by a CultureInfo object. ParseExact 메서드는 en-US 문화권의 자세한 날짜 패턴을 따라는 문자열만 구문 분석할 수 있습니다.This ParseExact method can only parse strings that follow the long date pattern in the en-US culture.

CultureInfo MyCultureInfo = new CultureInfo("en-US");
string[] MyString = { " Friday, April 10, 2009", "Friday, April 10, 2009" };
foreach (string dateString in MyString)
{
    try
    {
        DateTime MyDateTime = DateTime.ParseExact(dateString, "D", MyCultureInfo);
        Console.WriteLine(MyDateTime);
    }
    catch (FormatException)
    {
        Console.WriteLine("Unable to parse '{0}'", dateString);
    }
}
// The example displays the following output:
//       Unable to parse ' Friday, April 10, 2009'
//       4/10/2009 12:00:00 AM
Dim MyCultureInfo As New CultureInfo("en-US")
Dim MyString() As String = {" Friday, April 10, 2009", "Friday, April 10, 2009"}
For Each dateString As String In MyString
    Try
        Dim MyDateTime As DateTime = DateTime.ParseExact(dateString, "D",
                                                     MyCultureInfo)
        Console.WriteLine(MyDateTime)
    Catch e As FormatException
        Console.WriteLine("Unable to parse '{0}'", dateString)
    End Try
Next
' The example displays the following output:
'       Unable to parse ' Friday, April 10, 2009'
'       4/10/2009 12:00:00 AM

ParseParseExact 메서드의 각 오버로드에는 문자열의 서식 지정에 대한 문화권별 정보를 제공하는 IFormatProvider 매개 변수도 있습니다.Each overload of the Parse and ParseExact methods also has an IFormatProvider parameter that provides culture-specific information about the formatting of the string. IFormatProvider 개체는 표준 문화권을 나타내는 CultureInfo 개체이거나 CultureInfo.DateTimeFormat 속성에서 반환하는 DateTimeFormatInfo 개체입니다.This IFormatProvider object is a CultureInfo object that represents a standard culture or a DateTimeFormatInfo object that is returned by the CultureInfo.DateTimeFormat property. ParseExact는 하나 이상의 사용자 지정 날짜 및 시간 형식을 정의하는 추가 문자열이나 문자열 배열 인수도 사용합니다.ParseExact also uses an additional string or string array argument that defines one or more custom date and time formats.

참고 항목See also