Я пишу приложение для WP7, и часть функций включает использование значения DateTime. Это значение также сохраняется (в базе данных Sterling).
Я пытался уклониться от различных культурных ценностей в датах, и там, где мне нужно это представить, я делаю это, используя свой собственный формат. Я никогда не возился с DateTime как таковым.
Все отлично работает с эмулятором, на ПК, на котором установлена английская версия (локаль Новой Зеландии)
Но на самом телефоне все было испорчено, как день и месяц. Теперь я понял, что языком на телефоне был английский (США), а региональным форматом был английский (Новая Зеландия). Изменились оба на английский (США), и все хорошо по телефону.
Итак, мои вопросы:
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}"
и свойство в моем классе hat отображается на привязку
public string DateTimeDayString
{
get
{
return NextDateTime.ToString("dddd MMM d");
}
}
Когда язык и регион телефона совпадают, все работает нормально, однако, когда язык и регион разные, т.е. язык английский - Великобритания и английский - США,
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 Extension (потому что у меня есть пользователь, который также вводит время с помощью таймера
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;
}