2010-06-03 29 views
14

Chúng tôi lưu trữ tất cả ngày của chúng tôi cơ sở dữ liệu SQL Server 2008 theo thời gian UTC trong cột DateTime. Tôi đang sử dụng SSRS để tạo báo cáo và tôi cần phải chuyển đổi tất cả các lần trên báo cáo thành Múi giờ của máy tính nơi họ đang chạy báo cáo từ đó.Làm việc với các múi giờ trong SSRS

Tôi biết luôn có thể chuyển giá trị múi giờ hiện tại làm tham số cho báo cáo và cộng hoặc trừ chênh lệch khỏi múi giờ, nhưng điều này sẽ không hiển thị chính xác ngày tháng do tiết kiệm ánh sáng ban ngày.

SSRS có bất kỳ chức năng nào xử lý việc này không? Tôi có nên vượt qua múi giờ để các chức năng máy chủ SQL và có SQL Server chuyển đổi thời gian?

Trả lời

14

Tôi đã tìm ra. Trong báo cáo SSRS, tôi đã thêm một tài liệu tham khảo để lắp ráp các System.Core

Sau đó, bất cứ nơi nào tôi cần phải chuyển đổi múi giờ tôi đã sử dụng:

= Code.FromUTC (Fields UTCDateFromDatabase.Value, thông số! TimeZone.Value)

nơi Parameters TimeZone.Value là chuỗi giá trị của múi giờ mà có thể được lấy ra trong ứng dụng bằng cách sử dụng TimeZone.CurrentTimeZone.StandardName

tôi có lẽ nên đặt những gì FromUTC làm:

Shared Function FromUTC(ByVal d As Date, ByVal tz As String) As Date 
Return (TimeZoneInfo.ConvertTimeBySystemTimeZoneId(d, TimeZoneInfo.Utc.Id, tz)) 
end function 
+0

Điều này là tốt nếu bạn chỉ gọi hàm nó một vài lần, nhưng không nếu bạn đang gọi hàm cho mỗi hàng. Đối với một báo cáo lớn, gọi hàm của bạn cho mỗi hàng sẽ ảnh hưởng đến hiệu suất của hàng xuất khẩu. Tôi đã không thể tìm thấy một thay thế không may. – Kev

+0

@ClassyFedora - Không đặc biệt SSRS, nhưng [điều này có thể giúp] (https://github.com/mj1856/SqlServerTimeZoneSupport) –

7

Hãy thử sử dụng này để thay thế:

=System.TimeZone.CurrentTimeZone.ToLocalTime(Fields!DateTime.Value) 

Đối SSRS báo cáo gọi từ AX 2012, đây là những gì tôi sử dụng.

tín dụng đi vào bài đăng này: http://social.msdn.microsoft.com/Forums/en-US/500448a3-bf58-44ab-8572-81becd67d8b8/convert-utc-time-to-local-time?forum=sqlreportingservices

+5

Điều này thực sự có hiệu quả không? Các báo cáo được hiển thị trên phía máy chủ. Điều này sẽ chỉ chuyển đổi thành thời gian máy chủ cục bộ, không chuyển đổi thành giờ địa phương của người dùng. – m0n0ph0n

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