2012-01-05 32 views
6

Tôi đang cố gắng sử dụng API Exchange 2007 để truy vấn tính khả dụng của lịch cho một người dùng cụ thể. Mã mẫu của tôi đang tạo ra ngoại lệ sau:Sự khác biệt giữa đối tượng DateTime mà tôi tạo và DateTime.Now

Khoảng thời gian được chỉ định cho FreeBusyViewOptions.TimeWindow là không hợp lệ.

Dưới đây là đoạn code mẫu:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 

service.AutodiscoverUrl("[email protected]"); 

DateTime startTime = new DateTime(2012, 1, 6, 7, 0, 0); 

TimeWindow tw = new TimeWindow(startTime, startTime.AddHours(8)); 

GetUserAvailabilityResults result = service.GetUserAvailability(new List<AttendeeInfo> { new AttendeeInfo("[email protected]") }, tw, AvailabilityData.FreeBusyAndSuggestions); 

Điều lạ là, nếu tôi thay thế phân StartTime của tôi với những điều sau đây hoạt động:

DateTime startTime = DateTime.Now; 

sự khác biệt giữa các đối tượng DateTime là gì Tôi được tạo và đối tượng được tạo bởi DateTime.Now. Tôi đã kiểm tra chúng chi tiết trong khi gỡ lỗi và không thể tìm thấy sự khác biệt.

Bất kỳ ý tưởng nào?

+0

giờ hiện tại cung cấp cho bạn ngày giờ hiện tại và ngày giờ bạn cung cấp là 1/6/2012 7:00:00 am –

+0

Tôi nhận thấy ngày/giờ thực tế khác nhau nhưng ngay cả khi tôi đặt ngày/giờ của đối tượng bằng Bây giờ nó có cùng một vấn đề. – joshb

Trả lời

21

Điều này thực sự có vẻ là một vấn đề trong phương pháp GetUserAvailability như trái ngược với bất kỳ thao tác DateTime nào.

Theo MSDN documentation:

Các GetUserAvailability (Generic, TimeWindow, AvailabilityData, AvailabilityOptions) phương pháp chỉ hỗ trợ khoảng thời gian mà là dài tối thiểu 24 giờ và bắt đầu và kết thúc lúc 12:00 giờ sáng . Để hạn chế kết quả của phương thức trong một khoảng thời gian ngắn hơn, bạn phải lọc kết quả trên máy khách.

+0

Cảm ơn bạn Tôi đã xem qua tài liệu nhiều lần và hoàn toàn bỏ qua điều đó. luôn luôn đúng (đôi khi nó hoạt động với phi 12am bắt đầu và <24 giờ thời gian) theo thử nghiệm của tôi, nhưng nếu tôi ở lại trong các tham số đó nó luôn luôn có vẻ làm việc .. – joshb

+1

chỉ có cùng một "oh shit" kinh nghiệm.Cảm ơn sự giúp đỡ –

+0

Vấn đề là truy vấn của tôi, cũng có chứa ngày bắt đầu và ngày kết thúc "DefineAvailabilityOptions (truy vấn)", không khớp với provi ngày bắt đầu và ngày kết thúc khấu trừ trong GetUserAvailability. Vì vậy, trước khi lái xe điên với giới hạn 24h bạn có thể muốn kiểm tra này đầu tiên ít nhất. –

2

Có thể nó có liên quan đến sự khác biệt giữa múi giờ và UTC, tạo ra một cửa sổ thời gian âm. Thử tăng từ AddHours (8) lên giá trị lớn hơn lên AddHours (24) và xem điều gì xảy ra.

+0

Đề xuất của bạn đã loại trừ ngoại lệ (cảm ơn) nhưng tôi không thực sự chắc chắn tại sao. Dù bằng cách nào, tôi đang thêm giờ vào cùng một DateTime như vậy làm thế nào tôi có thể kết thúc với một cửa sổ thời gian tiêu cực cho dù đó là địa phương hoặc UTC? – joshb

1

Kind khác nhau. Đây có thể là những gì nó đang tìm kiếm.

new DateTime(2012, 1, 6, 7, 0, 0) 

có loại "Không xác định".

Trong khi

DateTime.Now 

có một loại "địa phương".

Hãy thử sử dụng ToLocalTime để thiết lập tốt với địa phương:

DateTime startTime = new DateTime(2012, 1, 6, 7, 0, 0).ToLocalTime(); 
+0

Tôi cũng nhận thấy rằng khi tôi đang gỡ lỗi nhưng sử dụng phương thức ToLocalTime hoặc chuyển DateTimeKind vào hàm tạo đã không thay đổi bất kỳ thứ gì. – joshb

2

Xác định Kind để làm cho nó giống với Bây giờ là:

 DateTime startTime = new DateTime(2012, 1, 6, 7, 0, 0, DateTimeKind.Local); 

Với một số tỷ lệ cược mà bạn thực sự cần UTC. Phụ thuộc vào cấu hình máy chủ.

+0

Đi qua trong DateTimeKind vẫn tạo ra lỗi. – joshb

0

Nhìn vào các hàm tạo và mã cho lớp DateTime.

Tất cả trong số họ thay đổi biến tin:

private ulong dateData; 

Vì vậy, tất cả các nhà thầu đều giống nhau và DateTime.Now là một phương pháp public static trả về một thể hiện của lớp DateTime rằng làm điều tương tự.

Các thông báo lỗi nói:

Thời gian thời gian nhất định cho FreeBusyViewOptions.TimeWindow không hợp lệ.

Đó là vì nó không hợp lệ!

Bạn đặt trong một ngày trong tương lai và có nhiều khả năng là đã kiểm tra điều đó.Hãy thử với một ngày hiện tại.

+0

xem xét phương thức DateTime.Now, tất cả các trả về của nó có định dạng ... trả về DateTime mới (giá trị, DateTimeKind.Local ... –

+0

Tôi đã thử ngày hiện tại và nó tạo ra cùng một ngoại lệ. của phương pháp GetUserAvailability là kiểm tra tính khả dụng của lịch trong tương lai, vì vậy nó sẽ không có ý nghĩa gì nếu nó không chấp nhận các cửa sổ ngày trong tương lai – joshb

2

Tôi tìm ra rằng TimeWindow đã chỉ định phải chứa ít nhất một nửa đêm. Nhưng tôi không biết tại sao.

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