2012-04-26 37 views
6

có điều gì đó tôi không thể hiểu được với DateTime.ToOaDate().vấn đề với DateTime.ToOADate()

đây là những gì tôi có

var plainDate = "01/07/2011"; 
var dateTime1 = DateTime.Parse(plainDate, new CultureInfo("en-GB")); 
var value = dateTime1.ToOADate(); 
var dateTime2 = DateTime.Parse(DateTime.FromOADate(value).ToString(), new CultureInfo("en-GB")); 

dateTime1 và dateTime2 nên giống nhau, phải không? tôi chỉ chuyển đổi ngày tháng đơn giản thành ve và sau đó phục hồi nó như DateTime với cùng một nền văn hóa, nhưng thực sự khi tôi chạy nó dateTime2 có giá trị (7-Jan-2011) thay vì (1-Jul-2011)

+1

Điều này không liên quan gì đến 'ToOADate()'. Loại bỏ dòng 'value' và chỉ sử dụng' DateTime.Parse (dateTime1.ToString(), CultureInfo (...)) mới 'và bạn sẽ thấy chính xác cùng một hiệu ứng. Đó là chuỗi chuyển đổi đang gây ra vấn đề, không phải 'ToOADate' và' FromOADate' ... –

Trả lời

5

Tôi nghĩ đó là vì cuộc gọi của bạn tới ToString không chỉ định thông tin văn hóa.

Hãy thử ToString(new CultureInfo("en-GB")).

+0

có bây giờ nó giống hệt nhau .. nhiều thanx :) –

5

Khi bạn làm DateTime.Parse, bạn đang xác định các định dạng mà bạn mong đợi ngày đến được trong.

Khi bạn làm ToString(), bạn đang xác định rằng nền văn hóa hiện nay nên được sử dụng để định dạng ngày tháng.

Ở đây, tôi đoán Thread.CurrentThread.CurrentCulture.DateTimeFormat của bạn đang trả về định dạng Hoa Kỳ. Do đó, DateTime.FromOADate(value).ToString() trả về 07/01/2011, khi bạn phân tích cú pháp này bằng cách sử dụng en-GB, nó sẽ trả về ngày 7 tháng 1.