0

Я разрабатываю приложение для Windows Phone. Из-за разных форматов даты, используемых во всем мире, datepicker в Windows Phone отображает дату как dd-MM-yyyy для пользователей в Индии и MM/dd/yyyy для пользователей в США, только для примера. Таким образом, мое приложение выходит из строя, поскольку оно настроено на использование формата MM/dd/yyyy ТОЛЬКО для конкретного модуля.Преобразование различных форматов даты в MM/dd/yyyy в C#

Можете ли вы помочь мне с некоторым фрагментом кода, поскольку я не могу найти решение для этого?

Edit: Мои попробовать

DateTime dt = DateTime.ParseExact(x.msDate.ToString(),"M/d/yyyy",System.Globalization.CultureInfo.InvariantCulture); 
+0

Что такое значение 'x.msDate' точно? –

+0

Например, x.msDate = "24-12-2013"; –

+1

Как насчет использования типа 'DateTime' * везде * (с компонентом времени == полночь), где вы работаете с датами? Вы получаете строку из своего выбора даты? Это ваш выбор или этот дампикер не может вернуть 'DateTime'? –

ответ

0

Комбинация всех ответов сделала трюк для меня. Успешное выполнение кода:

DateTime originalDate,dt; 
    String msDate = "24-12-2013"; 
    String[] format = {"d-M-yyyy","M/d/yyyy"}; 
    CultureInfo enUS = new CultureInfo("en-US"); 
    foreach (var frmt in format) 
    { 
     if(DateTime.TryParseExact(msDate, frmt, enUS, DateTimeStyles.None,out dt)) 
     { 
      originalDate = dt; 
      Console.WriteLine(originalDate.ToString()); 
     } 
    } 
3

Используйте текущую культуру машины, выполняющей код:

MyDateTime.ToString(CultureInfo.CurrentCulture) 

Или текущую культуру машины работает код интерфейса:

MyDateTime.ToString(CultureInfo.CurrentUICulture) 

Или пройти в той или иной культуре:

MyDateTime.ToString(new CultureInfo("en-US")) 

Ваш пример определяет инвариантную культуру, поэтому было бы ожидать по умолчанию DateTime строки форматирования в. http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

Если вы можете получить свой ввод, чтобы передать DateTime в UTC, это также сделает вашу жизнь намного проще.

+0

Позвольте мне попробовать. –

1

Синхронизация строки даты, как и вы, является опасной. Вы должны использовать конструктор DateTime, который занимает год, месяц и день, таким образом, вы будете в безопасности

DateTime date1 = new DateTime(2010, 8, 18); 

Или

Таким образом, вы можете использовать TryParseExact http://msdn.microsoft.com/en-us/library/system.datetime.tryparseexact(v=vs.110).aspx

+0

x.msDate - это строка, поступающая непосредственно из базы данных. –

1

Как читать ваши комментарии, x.msDate - это строка, которая хранится в базе данных. Если эта строка может быть отформатирована для разных культур, и вам потребуется небольшая гибкость при разборе, вы можете использовать метод TryParse. Существует перегрузка, которая принимает IFormatProvider в качестве входа. Если вы хотите, чтобы разобрать, что содержит DateTime в формате, который отличается от формата текущей культуры, вы можете создать CultureInfo и использовать его свойство DateTimeFormat при разборе DateTime:

DateTime dt; 
if (!DateTime.TryParse(stringValue, out dt) 
{ 
    if (!DateTime.TryParse(stringValue, new CultureInfo("en-US").DateTimeFormat, DateTimeStyles.None, out dt) 
     throw new ArgumentException("Unable to parse date"); 
} 
// If you reach this line, you were able to parse the DateTime. 

Кроме того, вы можете создать аа список культур и попытаться разобрать строку с различными настройками культуры. После успешной обработки строки вы возвращаете значение:

public DateTime ParseString(string value) 
{ 
    CultureInfo[] cultures = {CultureInfo.CurrentCulture, 
           new CultureInfo("en-US"), 
           new CultureInfo("de-DE")}; 

    foreach(var cult in cultures) 
    { 
     DateTime dt; 
     if (DateTime.TryParse(value, cult, DateTimeStyles.None, out dt)) 
      return dt; 
    } 
    throw new ArgumentException(
     string.Format("Unable to parse DateTime for string {0}.", value)); 
} 
0

Может это поможет вам

string dateTime= Convert.ToDateTime(datepicker.Value).ToString("M/d/yyyy", System.Globalization.CultureInfo.InvariantCulture); 
Смежные вопросы