Bạn cần sử dụng ParseExact
phương pháp . Điều này nhận một chuỗi làm đối số thứ hai của nó chỉ định định dạng datetime ở đó, ví dụ:
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);
}
Nếu người dùng có thể chỉ định một định dạng trong giao diện người dùng, thì bạn cần phải dịch định dạng đó thành một chuỗi mà bạn có thể chuyển vào phương thức này. Bạn có thể làm điều đó bằng cách cho phép người dùng nhập trực tiếp chuỗi định dạng - mặc dù điều này có nghĩa là chuyển đổi có nhiều khả năng không thành công hơn vì họ sẽ nhập chuỗi định dạng không hợp lệ - hoặc có một hộp tổ hợp cung cấp cho họ các lựa chọn khả thi và bạn thiết lập các chuỗi định dạng cho các lựa chọn này.
Nếu có khả năng là đầu vào không chính xác (ví dụ: người dùng nhập) thì tốt hơn là sử dụng TryParseExact
thay vì sử dụng các ngoại lệ để xử lý trường hợp lỗi:
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);
}
Một giải pháp thay thế tốt hơn có thể là không giới thiệu cho người dùng lựa chọn định dạng ngày tháng, nhưng sử dụng quá tải có một loạt định dạng :
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);
}
Nếu bạn đọc các định dạng có thể có từ tệp cấu hình hoặc cơ sở dữ liệu thì bạn có thể thêm vào các định dạng này khi gặp tất cả các cách khác nhau mà mọi người muốn nhập ngày.
TryParse
. Đó làbool success = DateTime.TryParse(...);
.