2014-12-08 4 views
1

Мне нужно указать короткую дату 30-01 (30 января) в соответствии с пользователями LocaleId. Дата должна отображаться правильно в соответствии с местными пользователями. Примеры ожидаемых возможных перестановок формата даты: 30-01, 01-30, 30/01, 01/30 и т. Д.Показывать короткую дату в соответствии с пользователями localId

Примечание 1: Я не хочу, чтобы год отображался в строке даты , Примечание 2: Вы можете предположить, что мы уже знаем LocalId. Примечание 3: MyDate.ToString («dd/MM») не является ответом, который я ищу, поскольку он не рассматривает локальный.

+3

_ «MyDate.ToString (» дд/MM ") не является ответом, который я ищу, поскольку он не рассматривает локальный« _ ** он делает **, учитывая местный разделитель дат, поскольку ['/' - спецификатор специального формата] (http: // msdn. microsoft.com/en-us/library/vstudio/8kb3ddd4%28v=vs.100%29.aspx#dateSeparator). –

+0

Предположим, что локальная локация пользователя отображает дату как dd-MM или MM-dd? Все нестандартные форматы даты/строки включают год. Возможно, единственный ответ - удалить год вручную. – MarzSocks

+0

Это настольное приложение или веб-приложение? Если это то, где он установлен на машине пользователя, это будет намного проще. – krillgar

ответ

2

«MyDate.ToString (» дд/ММ «) не ответ, я ищу, как это не считая местных»

Собственно это делает учитывая местный разделитель даты, так как / is a custom format specifier.

DateTime dt = new DateTime(2014, 01, 30); 
string result = dt.ToString("dd/MM"); // 30.01. for example in germany 

Но так как вы хотите правильный заказ (месяц/день или наоборот), это самое лучшее, что приходит на ум:

DateTime dt = new DateTime(2014, 01, 30); 
var dfi = DateTimeFormatInfo.CurrentInfo; 
var patternWithoutYear = dfi.ShortDatePattern 
    .Split(new[]{ dfi.DateSeparator }, StringSplitOptions.None) 
    .Where(token => !token.Contains("yy")); 
string result = dt.ToString(string.Join(dfi.DateSeparator, patternWithoutYear));