C#编程学习48:将字符串转换为日期、比较日期及日期合法性验证

字符串转日期格式

1 将8位日期字符串转换为日期格式

dateStr = "20220203";
//指定转换格式 
System.IFormatProvider format=new System.Globalization.CultureInfo("zh-CN",true); 
string strDateFormat = "yyyyMMdd";
date = DateTime.ParseExact(dateStr,strDateFormat,format, DateTimeStyles.AllowWhiteSpaces); 

2 将6位字符串转化为日期格式

dateStr = "202202";
//指定转换格式 
System.IFormatProvider format=new System.Globalization.CultureInfo("zh-CN",true); 
string strDateFormat = "yyyyMM";
date = DateTime.ParseExact(dateStr,strDateFormat,format, DateTimeStyles.AllowWhiteSpaces); 

3 采用拼接连接符的方式进行日期转换

 //分别获取20051126中的年、月、日字符串     
string yyyy="20051126".Substring(0,4);     
string mm="20051126".Substring(4,2);     
string dd="20051126".Substring(5,2); //拼写符合日期格式的字符串     
string riqi=yyyy+"-"+mm+"-"+dd;  //将符合日期格式的字符串转化为DateTime数据类型     
DateTime dt = Convert.ToDateTime(riqi); 

4. 使用字符串插入函数进行日期转换

// 把20051126变为2005/11/26
DateTimeFormatInfo dtFormat = new System.GlobalizationDateTimeFormatInfo();
dtFormat.ShortDatePattern = "yyyy/MM/dd";
string s = "20051126";     
s = s.Insert(4,"/");     
s = s.Insert(7,"/");
DateTime dt = Convert.ToDateTime(s, dtFormat); 

验证是否为合法日期

public bool IsDate(string strDate)  
{  
    try  
    {  
        // strDate格式有要求,必须是yyyy-MM-dd hh:mm:ss
        DateTime.Parse(strDate);  //不是字符串时会出现异常
        return true;  
    }  
    catch  
    {  
        return false;  
    }  
}  

比较两个日期

        /// <summary>
        /// 比较两个日期大小
        /// </summary>
        /// <param name="dateStr1">日期1</param>
        /// <param name="dateStr2">日期2</param>
        /// <param name="msg">返回信息</param>
        public void CompanyDate(string dateStr1, string dateStr2,ref string msg) {
            //将日期字符串转换为日期对象
            DateTime t1 = Convert.ToDateTime(dateStr1);
            DateTime t2 = Convert.ToDateTime(dateStr2);
            //通过DateTIme.Compare()进行比较()
            int compNum = DateTime.Compare(t1, t2);

            //t1> t2
            if (compNum > 0) {
                msg = "t1:(" + dateStr1 + ")大于" + "t2(" + dateStr2 + ")";              
            }
            //t1= t2
            if (compNum == 0) {
                msg = "t1:(" + dateStr1 + ")等于" + "t2(" + dateStr2 + ")";
            }
            //t1< t2
            if (compNum < 0) {
                msg = "t1:(" + dateStr1 + ")小于" + "t2(" + dateStr2 + ")";
            }
        }

还可以使用 DateTime的compareTo函数进行日期比较

DateTime dt1 = DateTime.ParseExact(dateStr1, "yyyyMMdd", new CultureInfo("zh-CN", true), DateTimeStyles,AllowWhiteSpaces);
DateTime dt2 = DateTime.ParseExact(dateStr1, "yyyyMMdd", new CultureInfo("zh-CN", true), DateTimeStyles,AllowWhiteSpaces);
int flag = dt1.CompareTo(dt2);//flag=-1表示dt1比dt2早;0表示dt1与dt2相等;1表示dt1比dt2晚

简化代码总结:

// 方法1:直接取子串拼接
DateTime dt=Convert.ToDateTime("20100101".Substring(0,4)+"-"+"20100101".Substring(4,2)+"-"+"20071107".Substring(6,2)); 
// 方法2:
string dateString = "20110526";
DateTime dt = DateTime.ParseExact(dateString, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);

//或者

DateTime dt = DateTime.ParseExact(dateString, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);

参考资料:

  1. C# 中字符串转换成日期 - sunshinelym - 博客园 (cnblogs.com)
  2. C# 判断字符串是否为日期格式 - Adolf_Ye - 博客园 (cnblogs.com)
  3. C#代码中如何比较两个日期的大小? - 小小邪 - 博客园 (cnblogs.com)
  4. c#如何把8位字符串转换成日期格式 - Eight戒 - 博客园 (cnblogs.com)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小薛引路

喜欢的读者,可以打赏鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值