2011-08-25 41 views
5

Bộ chọn ngày/giờ hiện tại trong Sitecore giả định thời gian hệ thống cục bộ của máy chủ CM (Tiêu chuẩn phương Đông/Giờ ban ngày) trong trường hợp chúng tôi chọn ngày và giờ cho Sự kiện của chúng tôi.Làm cách nào để quản lý múi giờ trong Sitecore?

Nhanh chóng trở nên rõ ràng rằng chúng tôi cần một cách để các tác giả nội dung chọn múi giờ cho các sự kiện. Ban đầu, chúng tôi quyết định cung cấp Droplist các từ viết tắt múi giờ được xác định trước như '' PST ',' EST ',' EDT ', v.v. Trong khi giải pháp này hoạt động OK cho mục đích hiển thị, chúng tôi ngay lập tức gặp sự cố khi cố gắng tạo động .ICS lịch hẹn cho các sự kiện.

Để tạo tệp .ICS, chúng ta cần cách kết hợp ngày bắt đầu và ngày kết thúc của sự kiện (lần nữa là EST hoặc EDT) và viết tắt múi giờ (EST, PST, v.v.) thành đối tượng UTC DateTime .

Tôi hiểu rằng ASP.NET does not support timezone abbreviations, vì vậy tôi tin rằng chúng tôi đang gặp khó khăn trong việc duy trì danh sách các từ viết tắt cùng với giá trị bù trừ UTC của chúng. Không đủ để cung cấp cho tác giả nội dung của chúng tôi một danh sách các múi giờ như GMT -08: 00, GMT -07: 00, v.v., chúng tôi cần bao gồm một số loại viết tắt hoặc tên để giúp họ thực hiện lựa chọn.

Sitecore có bất kỳ trường hoặc tiện ích tích hợp nào để chọn Timezones không?

Trả lời

5

Sitecore không có mẫu được tích hợp để lưu trữ múi giờ nhưng bạn có thể dễ dàng tạo mẫu của riêng mình để làm như vậy. Tôi khuyên bạn nên thay đổi Droplist thành một Droplink (một droplist tham chiếu đến mục được tham chiếu theo tên, một droplink tham khảo mục được tham chiếu bởi GUID) rồi tạo mẫu mới cho nguồn. Mẫu mới của bạn có thể được gọi là Múi giờ. Tên của mỗi mục có thể là tên thân thiện (ví dụ: EDT, PDT, v.v.) và có thể có một trường trên mục, số Bù đắp. Trong mã của bạn, khi bạn xác định mục nào được chọn từ bây giờ Droplink, bạn có thể truy cập trường Bù đắp trên đó để xác định độ lệch thực tế. Một cái gì đó như thế này:

ReferenceField timezoneSelected = item.Fields["Timezone"]; 
string offsetVal = timezoneSelected.TargetItem.Fields["Offset"].Value; 
// parse out the true value from offsetVal 
1

Hãy thử giữ tất cả ngày/giờ trong UTC và chuyển đổi chúng thành EST, PTS vv trên thời gian hiển thị. Bằng cách sử dụng lớp Net TimeZoneInfo, bạn chỉ có thể chuyển đổi giá trị UTC được lưu trữ thành một múi giờ thích hợp tại thời gian hiển thị. Điều này sẽ giải quyết vấn đề tiết kiệm ánh sáng ban ngày là tốt. Sitecore không có nhiều hỗ trợ cho điều này, nhưng để làm cho mọi thứ dễ dàng hơn cho các tác giả nội dung, bạn có thể mở rộng trường Sitecore DateTime để bao gồm thả xuống múi giờ khi được nhập vào CMS. Loại trường mở rộng sẽ xử lý chuyển đổi giữa UTC và múi giờ ưa thích của tác giả nội dung.

Bạn cũng có thể mở rộng hồ sơ người dùng để tác giả nội dung có thể lưu trữ múi giờ ưa thích của họ. Bạn cũng nên chạy máy chủ của mình theo giờ UTC, nhưng vì bạn đã sống với EST nên có thể bạn không nên thay đổi máy chủ.

1

Cũng đáng của nhắc rằng trong trường hợp bạn có vài máy chủ phân phối về mặt địa lý, bạn nên có họ không chỉ ở UTC, nhưng đồng bộ. Điều này áp dụng cho mọi thứ bao gồm cả các cá thể DMS và xDB.

Nếu không, nó sẽ phá vỡ Event Queue và các sự kiện từ xa (như xuất bản) như rằng tất cả các công trình thông qua lõi cơ sở dữ liệu và (theo mặc định) sẽ được kiểm tra cho các sự kiện mới (mà trên thực tế là các bản ghi trong cơ sở dữ liệu với phù hợp dấu thời gian).

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