我一直在编写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;
}
答案 0 :(得分:0)
你还没有真正说出错的原因 - “白天和月份被搞砸了”并不是很精确。如果区域格式设置为新西兰,并且您看到日期格式为dd / MM / yyyy,那对我来说似乎完全合理 - 这是来自新西兰(或英国,或美国以外的大多数地方)的人... )可能会期待。
至于您是否需要允许不同的区域设置和区域 - 这完全是您的业务。您是否希望该应用在多个国家/地区使用?如果是这样,那么你绝对应对文化敏感。
至于你的第二个问题:一开始并不清楚是否存在“问题”。如果日期只是以新西兰风格格式化,我不认为这是一个问题。如果你以某种方式得到了腐败的数据,那就是另一回事了 - 你需要提供更多细节。