2010-03-20 35 views
3

是否有一種簡單的方法(可能內置解決方案)將TimeSpan轉換爲本地化的字符串?例如new TimeSpan(3, 5, 0);將被轉換爲3 hours, 5minutes(僅用波蘭語)。TimeSpan到本地化的字符串在C#

我當然可以創建自己的擴展:

public static string ConvertToReadable(this TimeSpan timeSpan) { 
     int hours = timeSpan.Hours; 
     int minutes = timeSpan.Minutes; 
     int days = timeSpan.Days; 
     if (days > 0) { 
      return days + " dni " + hours + " godzin " + minutes + " minut"; 
     } else { 
      return hours + " godzin " + minutes + " minut"; 
     } 
    } 

但這有點複雜,如果我想有正確的語法參與。

+0

你問這是任何人都不會講波蘭語無法回答的問題。如果你想要某人考慮波蘭語法,你將不得不告訴我們這是什麼語法 – 2010-03-20 23:53:56

+0

Kurresmack我明白,我不打算爲我寫的工作解決方案。認爲會有更通用的解決方案來解決這類問題(比如將本地化的DateTime轉換爲字符串)。因爲我沒有遵循「更加困難」的方式並且完成了。 你會得到「滴答」作爲你的代碼示例的建議讓我這樣做,我做到了(也張貼爲答案)。 Paulo也給了建議+1。 – MadBoy 2010-03-20 23:59:38

回答

2

我不認爲這是可能的。你可以做的是這樣的:

public static string ConvertToReadable(this TimeSpan timeSpan) { 
    return string.Format("{0} {1} {2} {3} {4} {5}", 
     timeSpan.Days, (timeSpan.Days > 1 || timeSpan.Days == 0) ? "days" : "day", 
     timeSpan.Hours, (timeSpan.Hours > 1 || timeSpan.Hours == 0) ? "hours" : "hour", 
     timeSpan.Minutes, (timeSpan.Minutes > 1 || timeSpan.Minutes == 0) ? "minutes" : "minute"); 
} 
+0

在波蘭有更多的選擇:)每種類型3或4。 – MadBoy 2010-03-20 22:43:36

+0

不過我覺得這是你的更好的選擇,因爲沒有辦法自動獲得這個.. – 2010-03-20 22:47:30

+0

爲什麼選擇timeSpan.Days> 1 || timeSpan.Days == 0?爲什麼不只是timeSpan.Days!= 1 – 2010-07-15 17:52:50

2

最簡單的方法是將格式字符串放入本地化資源中,並對每種受支持的語言進行適當的轉換。

不幸的是,沒有標準的方法來做這樣的事情。

似乎沒有什麼應該是正確的方式....同意: - \

而人們像我們這樣寫軟件支持多國語言受苦。

1

這裏,我已經熟了代碼:

public static string ConvertToReadable(this TimeSpan timeSpan) { 
     int hours = timeSpan.Hours; 
     int minutes = timeSpan.Minutes; 
     int days = timeSpan.Days; 
     string hoursType; 
     string minutesType; 
     string daysType; 
     switch (minutes) { 
      case 1: 
       minutesType = "minuta"; 
       break; 
      case 2: 
      case 3: 
      case 4: 
       minutesType = "minuty"; 
       break; 
      default: 
       minutesType = "minut"; 
       break; 
     } 
     switch (hours) { 
      case 1: 
       hoursType = "godzina"; 
       break; 
      case 2: 
      case 3: 
      case 4: 
       hoursType = "godziny"; 
       break; 
      default: 
       hoursType = "godzin"; 
       break; 
     } 
     switch (days) { 
      case 1: 
       daysType = "dzień"; 
       break; 
      default: 
       daysType = "dni"; 
       break; 
     } 


     if (days > 0) { 
      return days + " " + daysType + " " + hours + " " + hoursType + " " + minutes + " " + minutesType; 
     } 
     return hours + " " + hoursType + " " + minutes + " " + minutesType; 
    }