2014-02-12 2 views
0

Я делаю follwing:string.Format не применяется пользовательское форматирование на сервере

//TimeSpan rebateTime 
//int percentage 
string text = string.Format(
    CultureInfo.CurrentCulture, 
    "Rebate {0}% during {1:hh} h {1:mm} min", 
    percentage, 
    rebateTime; 

На моем DEV ПК текст содержит:

Rebate 32% during 05 h 00 min 

На моем Dev текст тестовый сервер содержит:

Rebate 32% during 05 h 00 min 

на моем общем тексте теста сервера содержит:

Rebate 32% during 05:00:00 h 05:00:00 min 

Как это возможно вообще?

+2

Код, который вы опубликовали, недействителен ... это даже не действительный C#, и вы указали только два из трех аргументов формата. Пожалуйста, отправьте короткую, но полную программу, которая демонстрирует проблему. –

+4

Также расскажите, какую версию .NET вы используете на сервере. Я считаю, что пользовательское форматирование для TimeSpan было введено только в .NET 4. –

+0

@JonSkeet Отличный совет! Похоже, это проблема. Я проверю. –

ответ

0

Я воспроизвел здесь ошибку.

Этот формат работает только с .NET 4. Вероятно, .NET 4 не установлен на вашем общем сервере.

См. Раздел Форматирование значения TimeSpan в TimeSpan Structure MSDN docs.

Чтобы проверить это, создать простой проект консольного:

static void Main(string[] args) 
    { 
     Console.WriteLine(String.Format(CultureInfo.CurrentCulture, "Rebate {0}% during {1:hh} h {1:mm} min", 0.15, new TimeSpan(DateTime.Now.Ticks))); 
     Console.ReadKey(); 
    } 

Выходы:

.NET 4

"Rebate 0.15% during 11 h e 47 min" 

.NET 3,5

"Rebate 0,15% during 735275.11:48:48.7362198 h 735275.11:48:48.7362198 min" 
0

Как другие указал, Время Span не имеют пользовательского форматирования перед тем .NET 4. Однако альтернативное решение не сложно вообще:

string.Format 
(
    "Rebate {0}% during {1:##} h {2:##} min", 
    percentage, 
    rebateTime.TotalHours, 
    rebateTime.Minutes 
); 
0

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

public static string ToReadableString(this TimeSpan span) 
    { 
     string formatted = string.Format("{0}{1}{2}{3}", 
      span.Duration().Days > 0 ? string.Format("{0:0} day{1}, ", span.Days, span.Days == 1 ? String.Empty : "s") : string.Empty, 
      span.Duration().Hours > 0 ? string.Format("{0:00} hour{1}, ", span.Hours, span.Hours == 1 ? String.Empty : "s") : string.Empty, 
      span.Duration().Minutes > 0 ? string.Format("{0:00} minute{1}, ", span.Minutes, span.Minutes == 1 ? String.Empty : "s") : string.Empty, 
      span.Duration().Seconds > 0 ? string.Format("{0:00} second{1}", span.Seconds, span.Seconds == 1 ? String.Empty : "s") : string.Empty); 

     if (formatted.EndsWith(", ")) formatted = formatted.Substring(0, formatted.Length - 2); 

     if (string.IsNullOrEmpty(formatted)) formatted = "0 seconds"; 

     return formatted; 
    } 

Когда он используется на отрезок времени, вы получите время в следующем формате (х дней х часов х минут х секунд) каждый раз, когда что-то не доступно будет быть скрытым.

+0

Причина этого в том, что я тоже использовал .NET 3.5 framework (как и для проекта миграции sharepoint 2009). – woutervs