最近在寫定時服務的時候,要獲取當天的零點這個時間,但是是這樣獲取的
復制代碼 代碼如下:
DateTime dt = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")+" 00:00:00");
Console.WriteLine(dt.ToString("yyyy-MM-dd HH:mm:ss"));
在本地,測試,QA環境測試了均沒有問題,但是上了公網服務器以後,這個定時服務,就出問題了;寫了下日志,竟然發現獲取當天的零點,拼起來後獲取的時間是前一天的零點,原來服務器時間是12小時制的,本地環境都是24小時制的。
繼續深究,發現每天的00:00:00到00:59:59這段時間,在24小時制時間內是當天的日期;但是在12小時制時間內,是前天的日期的12:00:00到12:59:59。舉個例子,比如說按照24小時制時間,今天的“2013-09-26 00:00:00”這個時間,在12小時制服務器中,獲取的話就是“2013-09-25 12:00:00”,DateTime.Now.ToString("yyyy-MM-dd")這個方法獲得的日期就是“2013-09-25”,那麼dt獲取就是“2013-09-25 12:00:00”。
原來,根據C#中獲取時間的小時制的不同,可以這樣獲取
復制代碼 代碼如下:
//24小時制:
DateTime dt = DateTime.Now;
string dt24 = dt.ToString("yyyy-MM-dd HH:mm:ss");
//12小時制:
DateTime dt = DateTime.Now;
string dt12 = dt.ToString("yyyy-MM-dd hh:mm:ss");
//是由H的大小寫決定
不管服務器的時間制是12小時還是24小時,大寫H獲取的就是24小時的時間,小寫h獲取的就是12小時的時間。