Как я могу получать форматы даты и времени на основе информации о культуре?
Чего я хочу...
Если культура является en-US, то
string dateFormat="MM/dd/yyyy";
string timeFormat="24.00 hrs";
Если культура en-GB, то
string dateFormat="dd/mmyyyy";
string timeFormat="24.00 hrs";
и т.д. для других стран.
Теперь, как мне получить эти значения формата даты и времени? Каковы стандарты? Как все страны используют одинаковые форматы даты и времени, а какие нет?
ok Я пробовал это: -
DateTime myDate = new DateTime();
string us = myDate.ToString(new CultureInfo("en-US"));
string us получает value = 1/1/0001 12:00:00 AM
Теперь, как извлечь из этого "dd/mm/yyyy" и "24.00 hrs" из моей колонки Dateformat в моей таблице... Я хочу хранить STRINGS, такие как dd/mm/yyyy или mm/dd/yyyy NOT date..На моем столбце TimeFormat в таблице значения, которые должны быть в магазинах, тоже STRINGS, например, мне нужно сохранить либо "24: 00hrs", либо "12: 00hrs"
Как мне это сделать сейчас?
**, используя ShorTimePattern, возвращает эти значения как
h:mm tt and HH:mm
Если я хочу сохранить значения в моей БД точно так же, как "24: 00hrs" и "12: 00hrs", как использовать эти значения..h: mm tt и HH: mm
какой из них предназначен для 24-часового формата и который для 12-часового формата? **
ok теперь есть и другая проблема... Я хочу, чтобы информация о десятичном разделителе и Thousand Separator тоже основывалась на CultureInfo... для чего это свойство?
Ответы
Ответ 1
Вы можете получить строки формата из свойства CultureInfo
DateTimeFormat
, который представляет собой экземпляр DateTimeFormatInfo
. Это, в свою очередь, имеет такие свойства, как ShortDatePattern
и ShortTimePattern
, содержащие строки формата:
CultureInfo us = new CultureInfo("en-US");
string shortUsDateFormatString = us.DateTimeFormat.ShortDatePattern;
string shortUsTimeFormatString = us.DateTimeFormat.ShortTimePattern;
CultureInfo uk = new CultureInfo("en-GB");
string shortUkDateFormatString = uk.DateTimeFormat.ShortDatePattern;
string shortUkTimeFormatString = uk.DateTimeFormat.ShortTimePattern;
Если вы просто хотите отформатировать дату/время с помощью CultureInfo
, передайте его как ваш IFormatter
при преобразовании DateTime
в строку, используя ToString
:
string us = myDate.ToString(new CultureInfo("en-US"));
string uk = myDate.ToString(new CultureInfo("en-GB"));
Ответ 2
//Попробуйте это, может помочь
DateTime myDate = new DateTime();
string us = myDate.Now.Date.ToString("MM/dd/yyyy",new CultureInfo("en-US"));
или
DateTime myDate = new DateTime();
string us = myDate.Now.Date.ToString("dd/MM/yyyy",new CultureInfo("en-GB"));
Ответ 3
Вы можете взглянуть на свойство DateTimeFormat, которое содержит определенные для культуры форматы.
Ответ 4
Используйте CultureInfo, как это, из MSDN:
// Creates a CultureInfo for German in Germany.
CultureInfo ci = new CultureInfo("de-DE");
// Displays dt, formatted using the CultureInfo
Console.WriteLine(dt.ToString(ci));
Дополнительная информация о MSDN. Здесь - ссылка всех разных культур.
Ответ 5
Попробуйте настроить пользовательский CultureInfo
для CurrentCulture
и CurrentUICulture
:
Globalization.CultureInfo customCulture = new Globalization.CultureInfo("en-US", true);
customCulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd h:mm tt";
System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = customCulture;
DateTime newDate = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd h:mm tt"));