Tạo ngày, giờ từ chuỗi trong C#

Sử dụng phương thức Parse hoặc ParseExact của lớp DateTime.
Có nhiều cách mô tả ngày, giờ; ví dụ 1st June 2004, 1/6/2004, 6/1/2004, 1-Jun-2004 cùng chỉ một ngày; 16:43 và 4:43 PM cùng chỉ một giờ. Lớp DateTime cung cấp phương thức tĩnh Parse rất linh hoạt, cho phép tạo thể hiện DateTime từ nhiều cách mô tả khác nhau trong chuỗi.
Phương thức Parse rất mạnh trong việc tạo đối tượng DateTime từ một chuỗi cho trước. Nó có thể xử lý một chuỗi chỉ chứa một phần thông tin hay chứa thông tin sai, và thay thế các giá trị thiếu bằng các giá trị mặc định. Ngày mặc định là ngày hiện tại, giờ mặc định là 12:00:00 AM. Nếu sau mọi cố gắng, Parse không thể tạo đối tượng DateTime, nó sẽ ném ngoại lệ System.FormatException. Ví dụ sau minh họa tính linh hoạt của Parse:

Code:

// 01/09/2004 12:00:00 AM
DateTime dt1 = DateTime.Parse(“Sep 2004”);
// 05/09/2004 02:15:33 PM
DateTime dt2 = DateTime.Parse(“Sun 5 September 2004 14:15:33”);
// 05/09/2004 12:00:00 AM
DateTime dt3 = DateTime.Parse(“5,9,04”);
// 05/09/2004 02:15:33 PM
DateTime dt4 = DateTime.Parse(“5/9/2004 14:15:33”);
// 07/10/2004 02:15:00 PM (giả sử ngày hiện tại là 07/10/2004)
DateTime dt5 = DateTime.Parse(“2:15 PM”);

Phương thức Parse linh hoạt và có thể tự sửa lỗi. Tuy nhiên, mức độ linh hoạt này không cần thiết trong trường hợp bạn muốn bảo đảm các chuỗi phải theo một định dạng nhất định. Khi đó, sử dụng phương thức ParseExact thay cho Parse. Dạng đơn giản nhất của ParseExact nhận ba đối số: chuỗi chứa ngày giờ, chuỗi định dạng xác định cấu trúc mà chuỗi chứa ngày giờ phải tuân theo, và một tham chiếu IFormatProvider cung cấp thông tin đặc thù về bản địa. Nếu IFormatProvider là null, thông tin về bản địa của tiểu trình (thread) hiện hành sẽ được sử dụng.
Nếu ngày giờ trong chuỗi đang xét không đúng với định dạng quy định, ParseExact sẽ ném ngoại lệ System.FormatException. Chuỗi định dạng được sử dụng tương tự như khi bạn chỉ định chuỗi đại diện cho một đối tượng DateTime. Điều này có nghĩa là bạn có thể sử dụng cả định dạng chuẩn lẫn định dạng tùy biến. Tham khảo phần tài liệu cho lớp System.Globalization.DateTimeFormatInfo trong tài liệu .NET Framework SDK để có thông tin đầy đủ về tất cả các kiểu định dạng.

Code:

// Chỉ phân tích các chuỗi chứa LongTimePattern.
DateTime dt6 = DateTime.ParseExact(“2:13:30 PM”,
“h:mm:ss tt”, null);
// Chỉ phân tích các chuỗi chứa RFC1123Pattern.
DateTime dt7 = DateTime.ParseExact(
“Sun, 05 Sep 2004 14:13:30 GMT”,
“ddd, dd MMM yyyy HH’:’mm’:’ss ‘GMT'”, null);
// Chỉ phân tích các chuỗi chứa MonthDayPattern.
DateTime dt8 = DateTime.ParseExact(“September 03”,
“MMMM dd”, null);