2013-06-04 39 views
11

Ứng dụng của tôi đồng bộ hóa dữ liệu trên nhiều thiết bị khác nhau. Vì lý do này, nó lưu trữ tất cả các ngày trong múi giờ UTC để tính toán cho các thiết bị khác nhau có thể được đặt thành các múi giờ khác nhau.Hiển thị thời gian theo múi giờ địa phương trong WPF/XAML

Vấn đề là khi tôi đọc ngày trở lại và hiển thị chúng có vẻ không chính xác (hầu hết người dùng đang ở trong Giờ mùa hè của Anh nên họ ở phía sau một giờ).

<TextBlock Margin="5" Style="{StaticResource SmallTextblockStyle}"> 
    <Run Text="Last Updated:" /> 
    <Run Text="{Binding Path=Submitted}" /> 
</TextBlock> 

Tôi có cần ghi đè thủ công thuộc tính CurrentCulture của chuỗi giao diện người dùng không? Tôi biết tôi phải làm điều này trong Silverlight.

Trả lời

12

Bạn có chỉ định "Utc" là DateTime.Kind khi phân tích cú pháp được lưu trữ DateTime và cũng chuyển đổi thành DateTime.ToLocalTime()?

public DateTime Submitted { 
    get { 
    DateTime utcTime = DateTime.SpecifyKind(DateTime.Parse(/*"Your Stored val from DB"*/), DateTimeKind.Utc); 

    return utcTime.ToLocalTime(); 
    } 

    set { 
    ... 
    } 
} 

^^ hoạt động tốt đối với tôi

Cập nhật:

class UtcToLocalDateTimeConverter : IValueConverter 
    { 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
     return DateTime.SpecifyKind(DateTime.Parse(value.ToString()), DateTimeKind.Utc).ToLocalTime(); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
     throw new NotImplementedException(); 
    } 
    } 

XAML:

<Window.Resources> 
    <local:UtcToLocalDateTimeConverter x:Key="UtcToLocalDateTimeConverter" /> 
</Window.Resources> 
... 
<TextBlock Text="{Binding Submitted, Converter={StaticResource UtcToLocalDateTimeConverter}}" /> 
+0

Tôi không làm bất cứ điều gì khi tải DateTime từ cơ sở dữ liệu, Tôi chỉ sử dụng EntityFramework ModelFirst thực thể khi họ đến. Có lẽ tôi cần phải ghi đè lên tài sản đó. – BenCr

+0

@BenCr tốt bạn có thể làm tương tự tôi đã có trong getter tài sản trong một công cụ chuyển đổi sau đó. Tôi sẽ sửa câu trả lời của tôi trong giây lát – Viv

+1

Không cần, tôi có thể loại bỏ công cụ chuyển đổi, tôi chỉ không muốn đi xuống con đường thêm nó vào mọi ràng buộc với một ngày trong đó. Tôi đã hy vọng rằng một cái gì đó trong công cụ XAML sẽ định dạng ngày theo các thiết lập văn hóa giao diện người dùng hiện tại. – BenCr

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