背景介紹:
在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...