Лучший способ выбрать и прочитать дату в формате dd / mm / yy?

#c# #.net #vb.net #datetime #datetime-format

#c# #.net #vb.net #дата-время #datetime-format

Вопрос:

В более ранних vb.net 2008 Я использовал DateTime для чтения даты в dd/mm/yy формате. Я использую для изменения информации о культуре в формате UK. Так что дата будет выбрана из SQL server в dd/mm/yy формате.

Но я знаю, что с этим нехорошо играть CultureInfo . Хотя я использовал следующий способ.

Есть еще идеи получше для меня?

 Sub Form_Load()
    Thread.CurrentThread.CurrentCulture = New CultureInfo("en-GB", False)    
End Sub
  

Есть еще идеи получше для меня? Спасибо за идеи.

Спасибо и с уважением.

Комментарии:

1. В каком формате ваш SQL Server хранит даты?

2. @abatishchev: Sql server хранит даты в виде двух целых чисел по 4 байта. Он не сохраняет ее ни в каком другом формате. То, как она отображается , — это другой вопрос, и он не связан с тем, как она хранится.

Ответ №1:

Из DateTime в string:

 string s = DateTime.Today.ToString("dd/MM/yyyy");
  

Из строки в DateTime:

 DateTime d;
bool success = DateTime.TryParseExact("26/05/2011", "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out d);
  

Ответ №2:

В C # вы могли бы получить строку даты в желаемом формате, например,

 string date = DateTime.Now.ToString("dd/MM/yyyy");
  

Если вы хотите получить объект DateTime из строкового значения, представляющего DateTime в определенной культуре, вы можете сделать

      DateTime dt = new DateTime();
                DateTime.TryParse("16/01/2011", System.Globalization.CultureInfo.CreateSpecificCulture("en-GB"),
  System.Globalization.DateTimeStyles.None, out dt);
  

Комментарии:

1. Лучше использовать DateTime. Сегодня, если вам не нужно время-расстайтесь

Ответ №3:

Дата-время -> Строка

 DateTime.Now.ToString( new CultureInfo("fr-FR", false) );
  

Строка —> DateTime:

Предпочтительным методом, вероятно, было бы DateTime.Parse()

 dateString = "16/02/2008 12:15:12";
try 
{
     dateValue = DateTime.Parse(dateString, new CultureInfo("en-GB", false));
     Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue);
}   
catch (FormatException) 
{
     Console.WriteLine("Unable to convert '{0}'.", dateString);
}
  

Таким образом, вы не изменяете информацию о культуре текущего контекста. Это предполагает, что вы заранее знаете, каким будет формат.

Комментарии:

1. Его лучше использовать DateTime.TryParse() , чтобы избежать возникновения исключений

Ответ №4:

Вы можете отформатировать дату с помощью CultureInfo, не задавая язык для всего потока, благодаря IFormatProvider интерфейсу:

 DateTime d = DateTime.Now;
CultureInfo c = new CultureInfo("en-GB", false);
string s = d.ToString(c.DateTimeFormat);
  

Дополнительным преимуществом этого является то, что у вас нет жестко запрограммированных форматов, и если пользователь изменит настройки локализации на своем компьютере, ваше приложение будет отражать их предпочтения.

Вы можете использовать DateTime.TryParse для анализа даты…

 string s = "01/01/2011";
DateTime date;
if (DateTime.TryParse(s, out date))
{
    // Parsed correctly
}
else
{
    // Invalid string!
}
  

И даже использовать, IFormatProvider чтобы помочь TryParse определить формат.

 CultureInfo c = new CultureInfo("en-GB", false);
string s = "01/01/2011";
DateTime date;
if (DateTime.TryParse(s, c.DateTimeFormat, DateTimeStyles.None, out date))
{
    // Parsed correctly
}
else
{
    // Invalid string!
}
  

Комментарии:

1. Я думаю, OP не нужна именно культура en-GB, кажется, что он использует ее из-за DateTimeFormat="dd/MM/yyyy"