2013-06-22 16 views
0

,如果我想從數據庫取回的日期和時間,並在格式顯示它如何在彬彬有禮格式

「2分鐘前,就在剛纔,或6個月前」還挺等顯示日期和時間。

我怎麼能做到這一點.. :)

任何一個可以建議我如何做到這一點請

+0

你有沒有試過在.net中檢查日期函數? –

+0

也許很多if-else? –

+1

您可以使用TimeSpan解決此問題。 –

回答

2
string gettime(DateTime updatedat) 
{ 
    string toren = "A moment earlier"; 
    TimeSpan ts = DateTime.Now - updatedat; 
    if (ts.TotalSeconds<60) 
    { 
      toren = ts.TotalSeconds.ToString() + " seconds ago"; 
    } 
    else if (ts.TotalMinutes < 60) 
    { 
      toren = ts.TotalMinutes.ToString() + " minutes ago"; 
    } 
    else if (ts.TotalHours < 24) 
    { 
      toren = ts.TotalHours.ToString() + " hours ago"; 
    } 
    else if (ts.TotalDays < 30) 
    { 
      toren = ts.TotalDays.ToString() + " days ago"; 
    } 
    else 
    { 
      double month = ts.TotalDays/30; 
      if (month<13) 
      { 
       toren = month.ToString() + " months ago"; 
      } 
      else 
      { 
       double year = month/12; 
       toren = year.ToString() + " years ago"; 
      } 
    } 
    return toren; 
} 

更改/優化。

+0

這個解決方案不支持單數(如'一分鐘前') –

+0

如果條件允許,您將需要添加一個,因此我已經編寫了您需要根據您的需要對其進行優化。 – Ratna

+0

@Ratna ..什麼條件..? –

1
here

引用答案:

const int SECOND = 1; 
const int MINUTE = 60 * SECOND; 
const int HOUR = 60 * MINUTE; 
const int DAY = 24 * HOUR; 
const int MONTH = 30 * DAY; 

if (delta < 0) 
{ 
    return "not yet"; 
} 
if (delta < 1 * MINUTE) 
{ 
    return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago"; 
} 
if (delta < 2 * MINUTE) 
{ 
    return "a minute ago"; 
} 
if (delta < 45 * MINUTE) 
{ 
    return ts.Minutes + " minutes ago"; 
} 
if (delta < 90 * MINUTE) 
{ 
    return "an hour ago"; 
} 
if (delta < 24 * HOUR) 
{ 
    return ts.Hours + " hours ago"; 
} 
if (delta < 48 * HOUR) 
{ 
    return "yesterday"; 
} 
if (delta < 30 * DAY) 
{ 
    return ts.Days + " days ago"; 
} 
if (delta < 12 * MONTH) 
{ 
    int months = Convert.ToInt32(Math.Floor((double)ts.Days/30)); 
    return months <= 1 ? "one month ago" : months + " months ago"; 
} 
else 
{ 
    int years = Convert.ToInt32(Math.Floor((double)ts.Days/365)); 
    return years <= 1 ? "one year ago" : years + " years ago"; 
} 

是的,我做引用。因爲這個答案完全符合PO的要求。 :)

編輯: 問題PO:一兩件事。如果我從數據庫中檢索日期和時間字段是什麼。我如何暗示這段代碼?

不知道你的結構或代碼,它看起來是這樣的:根據您的需要

var cmd = new SqlCommand(yourConnection); 
cmd.CommandText = "SELECT yourDateColumn FROM yourTable"; 
using (var sr = cmd.ExecuteReader) 
{ 
    if (sr.Read) 
    { 
    var yourDateTime = sr.GetDateTime(0); 
    } 
} 
+0

還有一件事..如果我從數據庫檢索日期和時間字段怎麼辦..我怎麼能暗示此代碼.. –

+0

@ Kaushik相應地更新了我的答案。雖然這是更類似於僞代碼,因爲我不知道你的數據結構或任何東西。 –