2013-02-08 40 views
5

Tôi cần phải chuyển đổi chuỗi "Fri Sep 11 00:00:00 GMT+04:00 2020" thành một đối tượng DateTime11.09.2011.Chuyển đổi chuỗi ngày/giờ UTC trong C#

Khi tôi sử dụng

DateTime result; 
DateTime.TryParseExact(MyString, "ddd MMM dd HH:mm:ss 'GMT'zzz yyyy", 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out result); 

result bằng {9/10/2020 11:00:00 PM}.

Làm thế nào tôi có thể sửa đổi các mã để các thành phần ngày là 11.09.2011không10.09.2011 (Tôi chỉ cần ngày và không quan tâm đến thời điểm đó)?

Trả lời

6

Thay vào đó, hãy phân tích cú pháp thành một số DateTimeOffset, với điều kiện bạn đã nhận được khoản bồi hoàn. Từ số documentation of the zz specifier mà bạn đang sử dụng:

Với giá trị ngày giờ, định dạng tùy chỉnh định dạng "zz" thể hiện chênh lệch đã ký của múi giờ của hệ điều hành địa phương từ UTC, được đo bằng giờ. Nó không phản ánh giá trị của thuộc tính DateTimeKind của một cá thể. Vì lý do này, trình định dạng định dạng "zz" không được khuyến khích sử dụng với các giá trị DateTime.

Vì vậy, bạn muốn kết thúc với:

DateTimeOffset result; 
bool success = DateTimeOffset.TryParseExact 
     (text, "ddd MMM dd HH:mm:ss 'GMT'zzz yyyy", 
      CultureInfo.InvariantCulture, DateTimeStyles.None, out result); 

Từ đó, bạn có thể lấy DateTime phần, mà sẽ là nửa đêm ngày 11 tháng 9.

Nếu bạn muốn chỉ một ngày, bạn có thể sử dụng dự án Noda Time của tôi để tạo ra một LocalDate:

LocalDate = OffsetDateTime.FromDateTimeOffset(result).LocalDateTime.Date; 

(Tôi rất muốn đề nghị phân tích trực tiếp đến OffsetDateTime, nhưng chúng tôi vẫn chưa nhận được sự ủng hộ Chúng tôi hy vọng sẽ đưa nó vào phiên bản 1.2.)

4

C# không có loại Date thuần túy.
Nếu bạn không quan tâm đến thời gian, chỉ cần bỏ qua phần đó của DateTime.

Nếu bạn muốn thời gian luôn là nửa đêm, hãy sử dụng thuộc tính .Date, sẽ trả về DateTime cùng ngày nhưng vào lúc nửa đêm.

+0

Vấn đề là tôi nhận được '10.09.2011' (sai) thay vì '11.09.2011' (chính xác). I E. Tôi cần một gợi ý về cách sửa đổi mã như vậy mà 'kết quả 'bằng' 11.09.2011 ...' (ở đâu ... là thời gian, điều đó không liên quan đến tôi). –

Các vấn đề liên quan