2010-10-21 113 views
2

可能重複:
How do I calculate relative time?計算時間跨度使用asp.net

我想用asp.net C#來計算,當一個文件被上傳的時間跨度。例如,如果我兩週前上傳了一個文件,我的文字會顯示'已上傳2周前',或者如果我已上傳文件4個月前我的文字會顯示'已上傳4個月前'

任何人都可以請給我一些關於如何去做這件事的提示。

感謝

回答

2

我有這個問題,並創建TimeSpan擴展類如下。

對於用法,您只需在TimeSpan實例上使用ToFriendlyString()即可。

public static class TimeSpanExtensions 
{ 
    public static string ToFriendlyString(this TimeSpan t) 
    { 
     return ToFriendlyString(t, Thread.CurrentThread.CurrentCulture); 
    } 

    public static string ToFriendlyString(this TimeSpan t, CultureInfo cultureInfo) 
    { 
     if(cultureInfo.IetfLanguageTag.StartsWith("en")) 
     { 
      return ToFriendlyString_English(t); 
     } 
     else 
     { 
      throw new NotSupportedException("This culture is currently not supported."); 
     } 
    } 

    private static string ToFriendlyString_English(TimeSpan t) 
    { 
     int years = t.Days/365; 
     int months = t.Days/30; 
     int weeks = t.Days/7; 

     if (years > 0) 
     { 
      return string.Format("{0} year{1}", years, years > 1 ? "s" : ""); 
     } 
     if (months > 0) 
     { 
      return string.Format("{0} month{1}", months, months > 1 ? "s" : ""); 
     } 
     if (weeks > 0) 
     { 
      return string.Format("{0} week{1}", weeks, weeks > 1 ? "s" : ""); 
     } 
     if (t.Days > 0) 
     { 
      return string.Format("{0} day{1}", t.Days, t.Days > 1 ? "s" : ""); 
     } 
     if (t.Hours > 0) 
     { 
      return string.Format("{0} hour{1}", t.Hours, t.Hours > 1 ? "s" : ""); 
     } 
     if (t.Minutes > 0) 
     { 
      return string.Format("{0} minute{1}", t.Minutes, t.Minutes > 1 ? "s" : ""); 
     } 
     if (t.Seconds > 0) 
     { 
      return string.Format("{0} second{1}", t.Seconds, t.Seconds > 1 ? "s" : ""); 
     } 
     return "now"; 
    } 
} 
1

您可以使用DateTime.Now - dateTimeOfUpload獲得時間段。這將產生一個TimeSpan對象。從這個對象,你可以使用例如TotalDays給出dateTimeOfUpload過去的月數。