2015-05-22 16 views
74

cách thuận tiện nhất để tạo ra một trường hợp cụ thể của Microsoft.SharePoint.SPTimeZone như một sau là gì:Tạo hoặc lấy ví dụ cụ thể SPTimeZone

SPTimeZone utc = SPRegionalSettings.GlobalTimeZones 
            .OfType<SPTimeZone>() 
            .FirstOrDefault(tz => tz.Information.Bias == 0 
                && tz.Information.DaylightBias == 0); 

Đây có phải là hack tốt nhất tôi có thể nhận ...

Điều này đặc biệt là một vấn đề đối với tôi, vì tôi muốn thử phần mã này để kiểm tra đơn vị và buộc nó phải luôn trả về UTC. Thuộc tính GlobalTimeZones dường như phụ thuộc vào HttpContext.Current hoặc một yêu cầu thực tế - một điều kiện tiên quyết tôi không có trong đơn vị xét nghiệm của tôi ...

NB: Tôi biết rằng có System.TimeZoneInfo nhưng một hội đồng của bên thứ ba buộc tôi vào sử dụng SPTimeZone. ..

+0

* Tại sao * bạn có muốn tạo một cá thể không? 'SPTimeZone' được coi là múi giờ của trang web, không phải là lớp múi giờ chung. Cài đặt cung cấp cho bạn danh sách có sẵn * tức là đã cài đặt * múi giờ và có thể được tải từ các cài đặt trong cơ sở dữ liệu. Việc thiếu một nhà xây dựng là có lý do - bạn * không * phải tạo ra điều này một mình. Chỉ cần chuyển thuộc tính 'SPWeb.RegionalSettings.TimeZone' của trang web hiện tại vào thư viện –

+0

Bạn đang ở ngay đó - tuy nhiên, tôi đang xử lý dữ liệu đã được truy lục trong ngữ cảnh nâng cao và là trong múi giờ của người dùng đã được sử dụng để lấy lại đi. Thông tin này được hợp nhất khi đang di chuyển với kết quả tìm kiếm được lưu trữ trong UTC. Vì vậy, tôi có một kết quả được thiết lập với các múi giờ khác nhau - ngữ cảnh độ cao tuy nhiên cho phép tôi vượt qua một TimeZone; vì vậy đối với tôi, đây sẽ là cách dễ nhất để nhận tất cả dữ liệu trong UTC và sau đó tôi có thể chuyển đổi nó thành múi giờ của web (hoặc người dùng), nơi tôi muốn hiển thị ... – Markus

+0

@Markus i belive bạn có thể sử dụng msfakes để ghi đè hành vi 'SPRegionalSettings.GlobalTimeZones' và sau đó trả về' IEnumarable' của 'SPTimeZone'. Tôi không có máy chủ sharepoint để xác minh nó .... –

Trả lời

5

Để ngừng cuộc thảo luận, tôi quyết định tự trả lời câu hỏi này.

Có một số giải pháp thực sự hữu ích trong các ý kiến ​​mà tôi muốn tập hợp trong câu trả lời ngắn này:

  • Giới thiệu một mặt tiền/adapter
  • MS Fakes hoặc các khuôn khổ khác để
    • truy cập giả để SPTimeZone
    • tạo HttpContext giả
  • đi kèm với bản hack được mô tả trong câu hỏi trên ...

Tôi đã quyết định đi cùng với MSFakes để gọi cho toàn bộ cuộc gọi của bên thứ ba (vì tôi không thể kiểm tra hành vi của nó) và để shim tất cả các thuộc tính của SPTimeZone mà tôi sử dụng trong phương pháp của tôi. Giới thiệu một adapter không may là một lựa chọn cho tôi, vì tôi phải bảo toàn API (bên trong).

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