【发布时间】:2011-08-13 05:58:40
【问题描述】:
我一直在编写一个 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;
}
- 谢谢 - 彼得
【问题讨论】:
标签: datetime windows-phone-7 culture