ParseExact
Yö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(...);
.