문자열을 구문 분석하여 DateTime 개체로 변환하려면 날짜와 시간을 텍스트로 나타내는 방법에 대한 정보를 지정해야 합니다. 문화권마다 일, 월 및 연도에 대해 서로 다른 주문을 사용합니다. 일부 시간 표현은 24시간 시계를 사용하고, 다른 시간 표현은 "AM" 및 "PM"을 지정합니다. 일부 애플리케이션에는 날짜만 필요합니다. 다른 사람들은 시간만 필요합니다. 다른 사용자는 날짜와 시간을 모두 지정해야 합니다. 문자열을 DateTime 개체로 변환하는 메서드를 사용하면 필요한 형식과 애플리케이션에 필요한 날짜 및 시간의 요소에 대한 자세한 정보를 제공할 수 있습니다. 텍스트를 DateTime올바르게 변환하는 세 가지 하위 작업이 있습니다.
- 날짜와 시간을 나타내는 텍스트의 예상 형식을 지정해야 합니다.
- 날짜 시간 형식의 문화권을 지정할 수 있습니다.
- 텍스트 표현의 누락된 구성 요소가 날짜 및 시간에 설정되는 방법을 지정할 수 있습니다.
Parse 및 TryParse 메서드는 날짜 및 시간의 많은 일반적인 표현을 변환합니다. ParseExact 및 TryParseExact 메서드는 날짜 및 시간 형식 문자열에 지정된 패턴을 따르는 문자열 표현을 변환합니다. 자세한 내용은 표준 날짜 및 시간 서식 문자열에 대한 문서과 사용자 지정 날짜 및 시간 서식 문자열에 대한 문서를 참조하십시오.
현재 DateTimeFormatInfo 개체는 텍스트를 날짜 및 시간으로 해석하는 방법을 더 자세히 제어할 수 있습니다. DateTimeFormatInfo 속성은 날짜 및 시간 구분 기호, 월, 일 및 연대의 이름 및 "AM" 및 "PM" 지정의 형식을 설명합니다. CultureInfo.CurrentCulture에 의해 반환된 CultureInfo은 현재 문화권을 나타내는 CultureInfo.DateTimeFormat 속성을 가지고 있습니다. 특정 문화권 또는 사용자 지정 설정을 원하는 경우 구문 분석 메서드의 IFormatProvider 매개 변수를 지정합니다. IFormatProvider 매개 변수의 경우 문화권을 나타내는 CultureInfo 개체 또는 DateTimeFormatInfo 개체를 지정합니다.
날짜 또는 시간을 나타내는 텍스트에 일부 정보가 누락되었을 수 있습니다. 예를 들어 대부분의 사람들은 "3월 12일"이 현재 연도를 나타낸다고 가정합니다. 마찬가지로 "2018년 3월"은 2018년 3월을 나타냅니다. 시간을 나타내는 텍스트에는 종종 시간, 분 및 AM/PM 지정만 포함됩니다. 구문 분석 메서드는 적절한 기본값을 사용하여 이 누락된 정보를 처리합니다.
- 시간만 있는 경우 날짜 부분은 현재 날짜를 사용합니다.
- 날짜만 있으면 시간 부분은 자정입니다.
- 날짜에 연도를 지정하지 않으면 현재 연도가 사용됩니다.
- 월의 날짜가 지정되지 않은 경우 해당 월의 첫 번째 날짜가 사용됩니다.
문자열에 날짜가 있는 경우 월과 일 또는 연도 중 하나를 포함해야 합니다. 시간이 있는 경우 시간 및 분 또는 AM/PM 지정자를 포함해야 합니다.
NoCurrentDateDefault 상수를 지정하여 이러한 기본값을 재정의할 수 있습니다. 해당 상수 사용 시 누락된 연도, 월 또는 일 속성은 1
값으로 설정됩니다.
Parse 사용하는 마지막 예제 이 동작을 보여 줍니다.
날짜 및 시간 구성 요소 외에도 날짜 및 시간의 문자열 표현에는 시간이 UTC(협정 세계시)와 얼마나 다른지 나타내는 오프셋이 포함될 수 있습니다. 예를 들어 "2007년 2월 14일 5:32:00 -7:00" 문자열은 UTC보다 7시간 이전의 시간을 정의합니다. 시간의 문자열 표현에서 오프셋이 생략되면 구문 분석 결과로 Kind 속성이 DateTimeKind.Unspecified로 설정된 DateTime 개체가 반환됩니다. 오프셋이 지정되면, 구문 분석 시 Kind 속성이 DateTimeKind.Local로 설정된 DateTime 객체가 반환됩니다. 또한 해당 값은 머신의 현지 표준 시간대로 조정됩니다. 구문 분석 메서드와 함께 DateTimeStyles 값을 사용하여 이 동작을 수정할 수 있습니다.
형식 공급자는 모호한 숫자 날짜를 해석하는 데도 사용됩니다. "02/03/04" 문자열이 나타내는 날짜의 구성 요소가 월, 일 및 연도인지는 불분명합니다. 구성 요소는 형식 공급자에서 유사한 날짜 형식의 순서에 따라 해석됩니다.
구문 분석
다음 예제에서는 DateTime.Parse 메서드를 사용하여 string
DateTime변환하는 방법을 보여 줍니다. 이 예제에서는 현재 스레드와 연결된 문화권을 사용합니다. 현재 문화권과 연결된 CultureInfo이 입력 문자열을 구문 분석할 수 없는 경우, FormatException 예외가 발생합니다.
팁 (조언)
이 문서의 모든 C# 샘플은 브라우저에서 실행됩니다. 출력을 보려면 실행 단추를 누릅니다. 직접 실험하도록 편집할 수도 있습니다.
비고
이러한 예제는 C# 및 Visual Basic모두에 대한 GitHub 문서 리포지토리에서 사용할 수 있습니다.
string dateInput = "Jan 1, 2009";
var parsedDate = DateTime.Parse(dateInput);
Console.WriteLine(parsedDate);
// Displays the following output on a system whose culture is en-US:
// 1/1/2009 00:00:00
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 00:00:00
문자열을 구문 분석할 때 형식 지정 규칙이 사용되는 문화권을 명시적으로 정의할 수도 있습니다.
CultureInfo.DateTimeFormat 속성에서 반환된 표준 DateTimeFormatInfo 개체 중 하나를 지정합니다. 다음 예제에서는 형식 공급자를 사용하여 독일어 문자열을 특정 형식의 코드인 'DateTime'으로 구문 분석합니다.
de-DE
문화를 대표하는 CultureInfo를 만듭니다. 이 CultureInfo
개체를 사용하면 이 특정 문자열을 성공적으로 구문 분석할 수 있습니다. 이 프로세스는 CurrentThread의 CurrentCulture에 있는 설정을 차단합니다.
var cultureInfo = new CultureInfo("de-DE");
string dateString = "12 Juni 2008";
var dateTime = DateTime.Parse(dateString, cultureInfo);
Console.WriteLine(dateTime);
// The example displays the following output:
// 6/12/2008 00:00:00
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 00:00:00
그러나 Parse 메서드의 오버로드를 사용하여 사용자 지정 형식 공급자를 지정할 수 있습니다. Parse 메서드는 비표준 형식 구문 분석을 지원하지 않습니다. 비표준 형식으로 표현된 날짜 및 시간을 구문 분석하려면 대신 ParseExact 메서드를 사용합니다.
다음 예제에서는 DateTimeStyles 열거형을 사용하여 지정되지 않은 필드에 대한 현재 날짜 및 시간 정보를 DateTime 추가하지 않도록 지정합니다.
var cultureInfo = new CultureInfo("de-DE");
string dateString = "12 Juni 2008";
var dateTime = DateTime.Parse(dateString, cultureInfo,
DateTimeStyles.NoCurrentDateDefault);
Console.WriteLine(dateTime);
// The example displays the following output if the current culture is en-US:
// 6/12/2008 00:00:00
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 00:00:00
ParseExact (정확히 구문 분석)
DateTime.ParseExact 메서드는 지정된 문자열 패턴 중 하나를 준수하는 경우 문자열을 DateTime 개체로 변환합니다. 지정된 양식 중 하나가 아닌 문자열이 이 메서드에 전달되면 FormatException throw됩니다. 표준 날짜 및 시간 형식 지정자 또는 사용자 지정 형식 지정자의 조합을 지정할 수 있습니다. 사용자 지정 형식 지정자를 사용하여 사용자 지정 인식 문자열을 생성할 수 있습니다. 지정자에 대한 설명은 표준 날짜 및 시간 서식 문자열 및 사용자 지정 날짜 및 시간 형식 문자열문서를 참조하세요.
다음 예제에서 DateTime.ParseExact 메서드에는 먼저 구문 분석할 문자열 개체가 전달되고, 그 뒤에 형식 지정자와 CultureInfo 개체가 전달됩니다. 이 ParseExact 메서드는 en-US
문화권에서 긴 날짜 패턴을 따르는 문자열만 구문 분석할 수 있습니다.
var cultureInfo = new CultureInfo("en-US");
string[] dateStrings = { " Friday, April 10, 2009", "Friday, April 10, 2009" };
foreach (string dateString in dateStrings)
{
try
{
var dateTime = DateTime.ParseExact(dateString, "D", cultureInfo);
Console.WriteLine(dateTime);
}
catch (FormatException)
{
Console.WriteLine($"Unable to parse '{dateString}'");
}
}
// The example displays the following output:
// Unable to parse ' Friday, April 10, 2009'
// 4/10/2009 00:00:00
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 00:00:00
Parse 및 ParseExact 메서드의 각 오버로드에는 문자열의 서식 지정에 대한 문화권별 정보를 제공하는 IFormatProvider 매개 변수도 있습니다. IFormatProvider 개체는 표준 문화권을 나타내는 CultureInfo 개체 또는 CultureInfo.DateTimeFormat 속성에 의해 반환되는 DateTimeFormatInfo 개체입니다. ParseExact 하나 이상의 사용자 지정 날짜 및 시간 형식을 정의하는 추가 문자열 또는 문자열 배열 인수도 사용합니다.
참고하십시오
- 문자열 구문 분석
- 형식 유형
- .NET에서의 형식 변환
- 표준 날짜 및 시간 형식
- 사용자 지정 날짜 및 시간 형식 문자열
.NET