ParseExact
방법 을 사용해야합니다 . 이것은 datetime의 형식을 지정하는 두 번째 인수로 문자열을 취합니다. 예를 들면 다음과 같습니다.
dateString = "2011-29-01 12:00 am";
format = "yyyy-dd-MM h:mm tt";
try
{
result = DateTime.ParseExact(dateString, format, provider);
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
Console.WriteLine("{0} is not in the correct format.", dateString);
}
사용자가 UI에서 형식을 지정할 수있는 경우이 형식을이 메서드에 전달할 수있는 문자열로 변환해야합니다. 사용자가 형식 문자열을 직접 입력하도록 허용하면 됩니다. 이는 유효하지 않은 형식 문자열을 입력하기 때문에 변환이 실패 할 가능성이 더 높다는 것을 의미 하거나 가능한 선택 사항을 제공하는 콤보 상자를 사용하여 이러한 선택에 대한 형식 문자열을 설정합니다.
입력이 올바르지 않을 가능성이있는 경우 (예 : 사용자 입력) TryParseExact
오류 사례를 처리하기 위해 예외를 사용 하는 것보다 사용 하는 것이 좋습니다.
dateString = "2011-29-01 12:00 am";
format = "yyyy-dd-MM h:mm tt";
DateTime result;
if (DateTime.TryParseExact(dateString, format, provider, DateTimeStyles.None, out result))
{
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
else
{
Console.WriteLine("{0} is not in the correct format.", dateString);
}
더 나은 대안은 사용자에게 날짜 형식을 선택 하지 않고 형식 배열을 사용하는 오버로드를 사용하는 것입니다 .
string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt",
"MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss",
"M/d/yyyy hh:mm tt", "M/d/yyyy hh tt",
"M/d/yyyy h:mm", "M/d/yyyy h:mm",
"MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm",
"MM/d/yyyy HH:mm:ss.ffffff" };
string dateString;
try
{
dateValue = DateTime.ParseExact(dateString, formats,
new CultureInfo("en-US"),
DateTimeStyles.None);
Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
}
catch (FormatException)
{
Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
}
구성 파일이나 데이터베이스에서 가능한 형식을 읽으면 사람들이 날짜를 입력하려는 모든 다른 방법을 만나면서 여기에 추가 할 수 있습니다.
TryParse
. 그것은입니다bool success = DateTime.TryParse(...);
.