C 中如何獲取某月最後一天

2021-08-09 17:47:30 字數 2105 閱讀 5458

背景介紹:

在winform視窗中有兩個datetimepicker控制項,該控制項的時間格式可能是(yyyy,yyyy-mm,yyyy-mm-dd,yyyy-mm-dd hh:mm:ss)中任意一種,乙個用於表示開始時間starttime,另乙個表示結束時間endtime。

現在需要獲取開始和結束時間的時間戳傳給後台服務,用於查詢資料。

對於大部分時間格式,一般使用下面**就可以了。

datetime stime =timezone.currenttimezone.tolocaltime(new datetime(1970, 1, 1)); // 當地時區

string starttime = this.datetimepicker1.text;//獲取開始時間

long starttimestamp = (long)(convert.todatetime(starttime) - stime).totalmilliseconds;//開始時間的時間戳,毫秒數

但是,對於只有年和只有年月的時間格式,convert.todatetime(starttime) 會報錯,因為convert.todatetime(string)只接受標準格式的時間,所以需要對沒有日的時間進行處理。

思路如下:

對於開始時間

對於結束時間

yyyy格式組成yyyy-12-31

yyyy-mm格式,先判斷mm是否等於12,如是yyyy加一後,接上字串「-1-1」;不等於12,月份加一後,接上字串「-1」,然後轉成時間戳,得到下個月1號的時間戳減去24小時的毫秒數或秒數。

system.timezone.currenttimezone.tolocaltime(new datetime(1970, 1, 1)); // 當地時區

string regexstr = "^([0-9])(-([0-9])(-([0-9]))?)?$";//正規表示式判斷日期,捕獲型括號用於捕獲匹配部分的內容

string starttime = this.datetimepicker1.text;

string starttimeyear = regex.match(starttime, regexstr).groups[1].value;

string starttimemonth = regex.match(starttime, regexstr).groups[3].value;

string starttimeday = regex.match(starttime, regexstr).groups[5].value;

if (starttimeday == null || starttimeday == "")

else

//只有年

}long starttimestamp = (long)(convert.todatetime(starttime) - stime).totalmilliseconds;//開始時間的時間戳,毫秒數

string endtime = this.datetimepicker2.text;

string endtimeyear = regex.match(endtime, regexstr).groups[1].value;

string endtimemonth = regex.match(endtime, regexstr).groups[3].value;

string endtimeday = regex.match(endtime, regexstr).groups[5].value;

long endtimestamp = 0;//結束時間的時間戳,毫秒數

if (endtimeday == null || endtimeday == "")

else

endtimestamp = (long)(convert.todatetime(temptime) - stime).totalmilliseconds - 24 * 3600 * 1000;

datetime dt = stime.addmilliseconds(endtimestamp);

}else

//只有年

}else

使用c 獲取某月的第一天和某月的最後一天

取得某月的第一天 要取得月份第一天的時間 private datetime firstdayofmonth datetime datetime 取得某月的最後一天 要取得月份最後一天的時間 private datetime lastdayofmonth datetime datetime 取得上個月...

SQL Server中獲取第一天 最後一天

專案中用到的,獲取已知年份的第一天和最後一天,覺得網來的不錯,留下做個備用。1.乙個月第一天的 select dateadd mm,datediff mm,0,getdate 0 2.本週的星期一 select dateadd wk,datediff wk,0,getdate 0 3.一年的第一天 ...

SQL獲取第一天最後一天

declare dtdatetime set dt getdate declare number int set number 3 1 指定日期該年的第一天或最後一天 a.年的第一天 selectconvert char 5 dt,120 1 1 b.年的最後一天 selectconvert cha...