2012-12-10 58 views
3

最新最好的方式來獲得SQL Server中的日期時間,並將其轉換爲使用友好的字符串,像這樣:轉換時間,便於閱讀的字符串

如果超過1天> 1天前。
超過7天>1周前
1年前
3分鐘前
56秒前。

等。這可以輕鬆完成嗎?

+0

的重複 - http://stackoverflow.com/問題/ 11 /計算相對時間 – Kami

回答

6

最好的辦法是做一個DateTime擴展方法:

public static class DateTimeExtensions 
{ 
    public static string ToRelative(this DateTime value) 
    {   
     DateTime now = DateTime.Now; //maybe UtcNow if you're into that 

     TimeSpan span = new TimeSpan(now.Ticks - value.Ticks); 
     double seconds = Math.Abs(ts.TotalSeconds); 

     if (seconds < 60) 
      return string.Format("{0} seconds ago", span.Seconds); 

     if (seconds < 2700) 
      return string.Format("{0} minutes ago", span.Minutes); 

     if (seconds < 86400) 
      return string.Format("{0} hours ago", span.Hours); 

     // repeat for greater "ago" times... 
    } 
} 

然後,讓您的來電對您DateTime值,像這樣:

myDateTime.ToRelative(); 
+0

是否有可能將asp.net中的datagrid列綁定到TimeStarted.ToAgo()? – sprocket12

+0

應該是,儘管你可能不得不在'ItemDataBound'事件中這樣做。這是Windows還是Web? – hunter

+1

如果你不使用UTC或DateTimeOffset,你在這裏要求麻煩。即使所有的值都是在同一時區生成的,您在夏時制變化周圍的答案也會不準確。另外 - 通過使用'Math.Abs​​',你排除了你可能想要「從現在起」而不是「之前」的未來日期 –