WP7 DAteTime不同的语言环境

时间:2011-08-13 05:58:41

标签: datetime windows-phone-7 culture

我一直在编写WP7应用程序,部分功能涉及使用DateTime值。此值也存储(在Sterling数据库中)。

我试图避开日期中的不同文化价值观,并且我需要在哪里展示它,我使用自己的格式。我从来没有像对待DateTime那样“捣乱”。

在运行英语(新西兰语区域设置)的PC上,一切正常,模拟器

但是在电话本身,事情正在被搞砸,因为白天和月份被搞砸了。现在已经意识到手机上的语言环境是英语(美国),但区域格式是英语(新西兰)。已经改为英语(美国),一切都很好。

所以我的问题是

1 /我是否需要允许不同的区域设置和区域

2 /是否有一种简单的方法可以确保不会发生此问题?

我的代码如下

属性定义如下

 public const string NextDateTimePropertyName = "NextDateTime";
    private DateTime _nextDateTime;
    public DateTime NextDateTime
    {
        get
        {
            return _nextDateTime;
        }
        set
        {
            if (_nextDateTime != value)
            {

                _nextDateTime = value;
                RaisePropertyChanged(NextDateTimePropertyName);

            }
        }

    }

显示日期的绑定,如下所示     TextBlock Text =“{Binding DateTimeDayString}”

并且我的班级帽子上的属性映射到绑定

 public string DateTimeDayString
    {

        get
        {
            return NextDateTime.ToString("dddd MMM d");
        }

    }

当手机区域设置和区域是同一个国家/地区时,一切正常,但是当区域设置和区域不同时,即区域设置英语 - 英国和英语 - 美国,那么 输入的8月9日将显示为“9月8日星期四”

我意识到拥有不同的语言环境和区域是一种不同寻常的设置......但是我正在寻找如何保护自己免受此事的影响。

通过DatePicker控件

选择日期
x:Name="datePicker"  Value="{Binding EventDate, Mode=TwoWay, UpdateSourceTrigger=Explicit}"
                 ValueChanged="datePicker_ValueChanged" ValueStringFormat="{}{0:D}"   Margin="22,87,91,0" 

视图模型中的属性如下

 private DateTime _EventDateTime;
    public DateTime EventDateTime
    {

        get
        {
            return _EventDateTime;
        }

        set
        {
            if (value != null)
            {
                _EventDateTime = value;

            }


        }


    }

当我存储此属性时

CurrSingleEventItem.NextDateTime = EventDate.BuildDateTime(EventTime);

和BuildDateTime扩展方法(因为我让用户通过时间戳输入时间

 public static DateTime BuildDateTime(this String DateString, String time)
    {


        DateTime dt = System.Convert.ToDateTime(DateString);
        DateTime timedt = System.Convert.ToDateTime(time);
        string timestr = timedt.ToString("H:mm");
        DateTime newDt = System.Convert.ToDateTime(dt.ToLongDateString() + " "  + timestr + ":00");
        return newDt;

    }
  • 谢谢 - 彼得

1 个答案:

答案 0 :(得分:0)

你还没有真正说出错的原因 - “白天和月份被搞砸了”并不是很精确。如果区域格式设置为新西兰,并且您看到日期格式为dd / MM / yyyy,那对我来说似乎完全合理 - 这是来自新西兰(或英国,或美国以外的大多数地方)的人... )可能会期待。

至于您是否需要允许不同的区域设置和区域 - 这完全是您的业务。您是否希望该应用在多个国家/地区使用?如果是这样,那么你绝对对文化敏感。

至于你的第二个问题:一开始并不清楚是否存在“问题”。如果日期只是以新西兰风格格式化,我不认为这是一个问题。如果你以某种方式得到了腐败的数据,那就是另一回事了 - 你需要提供更多细节。