C#中如何获取某月最后一天

来源:互联网 发布:飞升虫子升级数据 编辑:程序博客网 时间:2024/06/05 04:29

背景介绍:
在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-1-1
  • yyyy-MM格式组成yyyy-MM-1

对于结束时间
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]{1,4})(-([0-9]{1,2})(-([0-9]{1,2}))?)?$";//正则表达式判断日期,捕获型括号用于捕获匹配部分的内容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 == ""){    if (startTimeMonth != null && startTimeMonth != "")//年月    {          startTime += "-1";    }    else //只有年    {          startTime += "-1-1";    }}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 == ""){    if (endTimeMonth != null && endTimeMonth != "")//年月    {        string tempTime = "";        if (Int32.Parse(endTimeMonth) == 12)//结束时间的月份是12月        {            tempTime = (Int32.Parse(endTimeYear) + 1).ToString() + "-1-1";        }        else        {             tempTime = endTimeYear + "-" + (Int32.Parse(endTimeMonth) + 1).ToString() + "-1";        }    endTimeStamp = (long)(Convert.ToDateTime(tempTime) - sTime).TotalMilliseconds - 24 * 3600 * 1000;    DateTime dt = sTime.AddMilliseconds(endTimeStamp);    }    else //只有年    {        endTime += "-12-31";        endTimeStamp = (long)(Convert.ToDateTime(endTime) - sTime).TotalMilliseconds;    }}else {    endTimeStamp = (long)(Convert.ToDateTime(endTime) - sTime).TotalMilliseconds;}
阅读全文
0 0