2010-01-12 43 views
5

Tôi chỉ thấy rằng SqlDateTime.MinValue của tôi là khác nhau trên các máy khác nhau.C#: Tại sao SqlDateTime.MinValue của tôi lại khác nhau trên các máy khác nhau?

Đôi khi nó là = DateTime (1953, 1, 1, 0, 0, 0);

nhưng trên các máy khác, nó là = DateTime (1753, 1, 1, 0, 0, 0);

Làm cách nào có thể? Hệ điều hành trên cả hai máy là WinXP SP2.

Edit:

Mã của tôi là như thế này:

DateTime date; 

... 

if (date == SqlDateTime.MinValue) 
{ 
    return "(any)"; 
} 
else 
{ 
    return date.ToString(); 
} 

Mã này không bao giờ phải trả lại 01 tháng 1 năm 1753 nhưng nó đã làm (trên một số máy). Số phút và giây của ngày không được mã của tôi sử dụng và phải luôn giữ nguyên giá trị mặc định.

+0

Bạn đang sử dụng giá trị như thế nào? tức là có bất kỳ quá trình truyền kiểu nào đang diễn ra (ví dụ: đến & từ chuỗi) - nếu có, có thể xuống các cài đặt khu vực ảnh hưởng đến quá trình truyền không? – AdaTheDev

+0

dupe: http://stackoverflow.com/questions/805770/sqldatetime-minvalue-c-datetime-minvalue-why – Dhana

+4

Đây không phải là ** trùng lặp. Câu hỏi đó liên quan đến lý do tại sao SqlDateTime.MinValue! = DateTime.MinValue, một câu hỏi khác nhau – AdaTheDev

Trả lời

0

Bạn có chắc chắn là bạn đã chính xác về các giá trị khác nhau không? SqlDateTimedocumented as having a fixed start date at MSDN cho tất cả các phiên bản của .NET Framework:

Ngày có hiệu lực tối thiểu cho một cấu trúc SqlDateTime là ngày 01 tháng 1, 1753.

Nếu nó thực sự tái sản xuất sau đó có vẻ như nó sẽ là một lỗi trong Khuôn khổ .NET (hoặc tài liệu) vì vậy Microsoft sẽ là những người yêu cầu trợ giúp. Cuộc gọi hỗ trợ miễn phí nếu vấn đề được phát hiện là lỗi.

1

Tôi biết sự cố này xảy ra trên các máy Windows NT cũ, trong đó phạm vi ngày là 1953-XXXX, thay vì 1753-9999. Bạn có chắc chắn rằng các máy này đều đang chạy Windows XP không?

0

Như những người khác đã nói, SqlDateTimestatic hàm tạo đặt năm. Vì vậy, trừ khi bạn đang gọi một nhà xây dựng khác không có lời giải thích rõ ràng.

static SqlDateTime() 
{ 
    ... 
    MinYear = 1753; 
    ... 
} 

Reflector cho thấy nó như 0x6d9

0

Trên một tiếp tuyến nhẹ, nhưng khi bạn đang sử dụng SqlDateTime.MinValue như một giá trị đặc biệt, tôi muốn đề nghị bạn sử dụng một DateTime nullable thay vì như thế này:

DateTime? date = null; 
... 
if (!date.HasValue) 
{ 
    return "(any)"; 
} 
else 
{ 
    return date.Value.ToString(); 
} 

Lưu ý cách viết tắt của loại có thể sử dụng được là sử dụng dấu hỏi: ví dụ Ngày giờ? Như tôi đã nói trong bình luận của tôi, tôi tự hỏi liệu có một diễn viên để chuỗi đó là làm cho nó xuất hiện SqlDateTime.MinValue trả về một giá trị khác biệt, trong thực tế nó là định dạng chuỗi mà thực sự là vấn đề (ví dụ thiết lập khu vực).

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