c#里判断字符串中部分位置是否为空,然后根据结果转换的问题

transdata[2]是是我接收的string类型的数据,里面存的是一个字符串,比如“2014-10-10 9:23”现在的问题是,在时间中如果那一位是零的话,直接是空,也就是"2014-10-10 "所以如果是00:00分的话把这个时间存入数据库就只有年月,没有后面的时间,我想判断如果这个字符串中后面的时间是空的,就转为“2014-10-10 00:00",这个应该怎么写?求大神帮助

第1个回答  2014-11-04

至少三种处理办法。

第一种:直接字符串处理。 如果transdata[index].Trim().Contains(' ') 为真,直接Trim然后加上" 00:00"

第二种:使用DateTime做两次转换。先用DateTime.Parse或TryParse将字符串转DateTime,然后ToString("yyyy-MM-dd hh:mm")。

第三种:使用正则表达式直接判断及替换。


个人推荐第二种,因为DateTime可以保证你的日期字符串是真实的数据,不会出现2月31号这样不合理的东西。无法解析的非法日期会报异常。

foreach(string strDate in transdata)
{
    string standardDateString=DateTime.Parse(strDate).ToString("yyyy-MM-dd hh:mm");
    DoSomething();
}

本回答被网友采纳
第2个回答  2014-11-04
                string time = transdata[2].Trim();
                if (time.IndexOf(":") != -1)
                {
                    transdata[2] = time + " 00:00";
                }
                if (time.Length < 18)
                {
                    transdata[2] = time + " 00:00";
                }

 两个办法都可以

追问

我那个是如果是空的话,后面时间中的冒号也没有了,你这个好像不太合适,能再帮我想想么,谢谢

追答

没有冒号就代表 没有后面的 时间和分钟啊

                if (time.IndexOf(":") == -1)
                {
                    transdata[2] = time + " 00:00";
                }

这个上面错了 应该是等于


你去除空格后 判断长度也可以啊

追问

不好意思,刚刚有点儿变化,我先没太弄清,这个里面那个冒号是还在的,我先按照你上面那个弄了的话,最后出来的结果是在冒号后面加上了00:00,也就是“2014-10-10 :00:00”原来的那个冒号还在,这应该怎么改,谢谢

追答

那就先删除前后空白 判断最后一个是不是冒号

                string time = transdata[2].Trim();
                if (time[time.Length-1] == ':')
                {
                    transdata[2] = time.Replace(":", "") + " 00:00";
                }

本回答被提问者采纳
第3个回答  2014-11-04
str=DateTime.Parse(str).ToString("yyyy-MM-dd hh:mm");

相似回答