#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"