1. 程式人生 > >C#-返回相對時間函數

C#-返回相對時間函數

5.x ret args 字符串 mon 相對時間 ota string ace

在公司一直做前端,經理叫我寫一個後端函數,要求是:

參數:DateTime--傳入任意時間類型
返回:string --返回傳入參數時間與當前時間的相對時間字符串,如:3天前,1小時前,5分鐘前。

註意判斷,返回值最大單位是年,如果傳入的時間與當前時間相差小於一年,則返回"x個月前",如果小於一個月,返回"x天前",小於1天,那就返回“x小時前”,如果小於1小時,返回“x分鐘前”,如小於1分鐘,則返回“x秒前”.... 以此類推至毫秒

然後我上網查了資料,資料很多,主要用了TimeSpan來計算時間間隔,TimeSpan可以只計算天、小時、分鐘、秒、毫秒

TimeSpan ts = currentDate - dynamicTime;(當前時間-需要計算的時間)

ts.Days ts.Hours ts.Minutes ts.Seconds ts.Milliseconds 分別表示計算時間距離現在有x天x小時x分鐘x秒x毫秒。

區別於

TotalDays:返回TimeSpan值表示的天數。
TotalHours:返回TimeSpan值表示的小時數。

TotalMinutes:返回TimeSpan值表示的分鐘數。

TotalSeconds:返回TimeSpan值表示的秒數。
TotalMilliseconds:返回TimeSpan值表示的毫秒數。


假如我們求的時間是: 2018-9-30 08:30:30 - 2018-9-29 07: 30:29。用第一組的結果是 1天 1小時 0 分鐘 1秒 。第二組的結果就是1.xxx天 或者25.xxx小時(xxx是小數,我的數學比較差).第一組如果時間不存在就為0,跳到下一個單位去計算。於是我用這個特性進行非0判斷。如果ts.day(天數)為0。那麽相距時間不會超過一天,就直接報出是幾分鐘前。而後的秒,毫秒不用理會。要求就是如此。如果ts.hours也為0。時間就不會超過1小時。直接看ts.minues距離幾分鐘。同理。。。。

但當時我想到個問題。求年、月份時,要考慮28,29,30,31號的情況。問了經理,他直接給我一串求年份和月份的代碼。

DateTime currentDate = DateTime.Now;
DateTime dynamicTime = Convert.ToDateTime("2017-9-5");
int year = currentDate.Year - dynamicTime.Year; //相差的年份
int month = (currentDate.Year - dynamicTime.Year) * 12 + (currentDate.Month - dynamicTime.Month); //相差的月份

以上代碼我就直接拿來用。但是其中它所求的年份是只要跨年了,即使沒滿12個月都算做一年。我們要求過了12個月才能算“一年前”。於是我做了如下修改,經理讓我封裝成函數。我不知道封裝是什麽。別人告訴我是接收參數,然後有個返回值。這就叫封裝,我大學沒學好/(ㄒoㄒ)/~~。下面是完整代碼,寫在控制臺裏。主要是else if語法和TimeSpan方法的使用。有些我沒有完全明白。希望大家看到多指正我的問題,謝謝啦~ o(* ̄▽ ̄*)o

using System;

namespace time
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
string str = "";
DateTime dynamicTime = Convert.ToDateTime("2018/9/29 15:16:00 ");
str =p.GetIntervalTime(dynamicTime); //
Console.WriteLine(str);
}
public string GetIntervalTime(DateTime dynamicTime)
{
DateTime currentDate = DateTime.Now; //獲取當前時間
TimeSpan ts = currentDate - dynamicTime; //使用TimeSpan 其中ts是當前時間減去待計算時間的值
int month = (currentDate.Year - dynamicTime.Year) * 12 + (currentDate.Month - dynamicTime.Month); //求月份,這裏還沒仔細推敲,就拿來用
string en = ""; //定義返回字符串
if (month >= 12)
{
int year = month / 12; //如果月份大於等於12個月。則除以12求出多少年。
en = year + "年前";
}
else if (month > 0)
{
en = month + "個月前"; //利用else if語法。這裏主要也是else if語法,如果mouth小於12個月並且大於0 ,則報出 n 個月前
}
else if (ts.Days != 0)
{
en = ts.Days + "天前"; //如果month小於等於0且Day不等於0,則報出多少天前。
}
else if (ts.Hours != 0)
{
en = ts.Hours + "小時前";
}
else if (ts.Minutes != 0)
{
en = ts.Minutes + "分鐘前";
}
else if (ts.Seconds != 0)
{
en = ts.Seconds + "秒前";
}
else
{
en = ts.Milliseconds + "毫秒前";
}
return en;
}

}
}

C#-返回相對時間函數