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
- C#中如何获取某月最后一天
- c#获取某月的第一天和某月的最后一天
- Shell获取某月最后一天
- C# 获取某月的第一天和最后一天
- C# 获取某月的第一天和最后一天
- C# 获取某月的第一天和最后一天
- C# 获取某月的第一天和最后一天
- javascript获取某月最后一天(公历)
- js获取某月的最后一天
- PHP获取某月的最后一天
- 获取某月第一天和最后一天
- 如何得到某月的最后一天
- 如何得到某月的最后一天
- C#中如何获取上个月第一天和最后一天
- 获取某月第一天,最后一天的sql server脚本
- 获取某月第一天,最后一天的sql server脚本
- c#设定某月的第一天与最后一天
- java获取当前月第一天和最后一天 java获取某月天数 js获取某月天数
- Java拦截过滤器模式
- Could not open JDBC Connection for transaction; nested exception is org.apache.commons.dbcp.SQLNest
- flask web开发-用户认证部分代码分析(二)
- 如何取数组的下标索引
- Linux 线程
- C#中如何获取某月最后一天
- 关于springboot的配置注册循序问题
- iOS 11开发教程(四)iOS11模拟器介绍一
- HTML5调用百度地图API进行地理定位实例
- TabLayout与ViewPager的联动使用
- android面试-java集合
- 奥威销售数据分析软件Power-BI销售心电图
- 白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖
- Spring Data JPA: No property name found for type ×××