ParseExactYöntemi kullanmanız gerekir . Bu, tarih saatinin içinde bulunduğu biçimi belirten ikinci bağımsız değişkeni olarak bir dizeyi alır, örneğin:
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);
}
Kullanıcı kullanıcı arayüzünde bir format belirleyebiliyorsa, bunu bu yönteme geçirebileceğiniz bir dizeye çevirmeniz gerekir. Doğrudan biçim dizesi girmesini sağlayan ya bunu yapabilirim - gerçi bu araçları dönüşüm olasılıkları da o kadar başarısız olduğunu olacak geçersiz biçim dizesi girin - ya da açılan kutu sahip olması mümkün seçimler ve sizinle hediyeler onları bu seçenekler için biçim dizelerini ayarlayın.
Girişin yanlış olma ihtimali varsa (örneğin, kullanıcı girişi) TryParseExact, hata durumunu ele almak için istisnalar kullanmak yerine kullanmak daha iyi olacaktır :
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);
}
Daha iyi bir alternatif etmek olabilir değil tarih biçimleri seçeneği kullanıcıya sunmak, ama kullanmak formatları bir dizi alır aşırı :
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);
}
Bir yapılandırma dosyası veya veritabanından olası biçimleri okursanız, insanların tarihleri girmek için istediği tüm farklı yollarla karşılaştığınızda bunlara ekleyebilirsiniz.
TryParse. Yanibool success = DateTime.TryParse(...);.