截取字符串

angellan 2008-07-09 05:49:57
我需要把:2008-07-09这个字符串给按年月日分开,
我用了string..Substring()这个方法截取的,
可是只能取出前四个,也就是2008,
后面的都取不出来,出异常了,
错误信息是:索引和长度必须引用该字符串内的位置。参数名: length
System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置
我写的代码如下:
string date1 = txtDate.Value.ToString();//date1是从输入框获取
int year2 = Convert.ToInt32(date1.Substring(0, 4));
int month2 = Convert.ToInt32(date1.Substring(5, 7));
int date2 = Convert.ToInt32(date1.Substring(8, 9));

因为我要判断用户输入的日期和当前的日期进行判断,输入的日期不能小于当前日期,只能大于1年,所以我想用这个方法来比较,都转换成int型来比较,
如果有更好的方法可进行比较,欢迎指点!
我用的是asp.net2.0
...全文
158 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
knifesky 2008-07-09
  • 打赏
  • 举报
回复
因为我要判断用户输入的日期和当前的日期进行判断,输入的日期不能小于当前日期,只能大于1年,所以我想用这个方法来比较,都转换成int型来比较,
如果有更好的方法可进行比较,欢迎指点!

================================
不用截取了了,直接比较下不行么?
DateTime now = DateTime.Now;
DateTime nextYear = DateTime.Now.AddYears(1);
DateTime input = Convert.ToDateTime(string);
然后直接比较就行了,你的条件说得不太清楚,或者我没理解,if(input>nextYear)...

如果非要操作字符串,那用string.Split('-')[index]好了
icelau 2008-07-09
  • 打赏
  • 举报
回复
string date1 = txtDate.Text;//date1是从输入框获取
就可以了吧,怎么后面写那么多?
czj067 2008-07-09
  • 打赏
  • 举报
回复
我只用过条件为0的---------即default后的条件
czj067 2008-07-09
  • 打赏
  • 举报
回复
public string CutfixContent(string str, string start, string last, int Condition)
{
string strTemp="";
if (str.IndexOf(start) > 0 && str.IndexOf(last) > 0)
{
switch (Condition)
{
case 1:
//strTemp = str.Substring(int.Parse(start), int.Parse(last) - int.Parse(start));
//strTemp = Strings.Left(str, 1);
strTemp = Strings.Right(str, Strings.Len(str) - Strings.InStr(str, start,CompareMethod.Text) + 1);
strTemp = Strings.Left(strTemp,Strings.InStr(strTemp,last,CompareMethod.Text));
//return strTemp;
// Strings.i
break;
case 2://对start----右截取,去除关键字
strTemp = Strings.Right(str, Strings.Len(str) - Strings.InStr(str, start,CompareMethod.Text) - Strings.Len(start) + 1);
break;
case 3://对start----右截取,包含关键字
strTemp = Strings.Right(str, Strings.Len(str) - Strings.InStr(str, start, CompareMethod.Text) + 1);
break;
case 4: //对start----左截取,去除关键字
strTemp = Strings.Left(str, Strings.InStr(str, start,CompareMethod.Text) - 1);
break;
case 5: //对start----左截取,包含关键字
strTemp = Strings.Left(str, Strings.InStr(str, start, CompareMethod.Text) + Strings.Len(start) - 1);
break;


//Strings.InstrRev是从str的右边开始检测与start或last匹配的字符,而Strings.Instr是从str的左边开始检测与start或last匹配的字符
case 6://对last----左截取,去除关键字
//strTemp = Strings.Left(str, Strings.InStrRev(str, last,-1, CompareMethod.Text) - 1);
strTemp = Strings.Left(str, Strings.InStr(str, last, CompareMethod.Text) - 1);
break;
case 7://对last----左截取,包含关键字
//strTemp = Strings.Left(str, Strings.InStrRev(str, last, -1, CompareMethod.Text)+Strings.Len(last) - 1);
strTemp = Strings.Left(str, Strings.InStr(str, last,CompareMethod.Text) + Strings.Len(last) - 1);
break;
case 8://对last----右截取,去除关键字
//strTemp = Strings.Right(str, Strings.Len(str) - Strings.InStrRev(str, last, -1, CompareMethod.Text)-Strings.Len(last) + 1);
strTemp = Strings.Right(str, Strings.Len(str) - Strings.InStr(str, last, CompareMethod.Text) - Strings.Len(last) + 1);
break;
case 9://对last----右截取,包含关键字
//strTemp = Strings.Right(str, Strings.Len(str) - Strings.InStrRev(str, last, -1, CompareMethod.Text) + 1);
strTemp = Strings.Right(str, Strings.Len(str) - Strings.InStr(str, last, CompareMethod.Text) + 1);
break;

default:
strTemp = Strings.Right(str, Strings.Len(str) - Strings.InStr(str, start, CompareMethod.Text) - Strings.Len(start)+ 1);
strTemp = Strings.Left(strTemp, Strings.InStr(strTemp, last, CompareMethod.Text) - 1);
break;
}
}
else
{
strTemp = "";
}
return strTemp;


}

--------------------------------
我只用过条件为0的。
string s = "2008-07-09";
s="?" + s + "?";//拼接字符串是为了便于使用CutfixContent函数
string year,month,date;
year = CutfixContent(s,"?","-",0);
month=CutfixContent(s,"-","-",0);
date = CutfixContent(s,"7-","?",0);
email=CutfixContent(s,"9※","※");
转换为int型你肯定会了
aino77 2008-07-09
  • 打赏
  • 举报
回复
2楼正解你改下 DateTime AA = DateTime.Parse("2001-1-1"); 就ok了
3楼也正解
suyiming 2008-07-09
  • 打赏
  • 举报
回复
晕死 明明回复 怎么还是看到零回复 郁闷
suyiming 2008-07-09
  • 打赏
  • 举报
回复
string t1='2008-07-09'             
t1= t1.Replace("-", "|");//分割标识
string[] Content = t1.Split(new char[] { '|' });//对内容进行拆分,并保存到数组

//获取内容

string t2=Content[0].ToString();//year
string t3=Content[1].ToString();//moth
string t4=Content[2].ToString();//day
tootto 2008-07-09
  • 打赏
  • 举报
回复
如果你确定用户输入的日期格式为 yyyy-mm-dd


DateTime userDate = Convert.ToDateTime("2008-5-3");

//return -1 if second date > first date, return 0 if same, return 1 if first date > second date
int result = DateTime.Compare(userDate, DateTime.Today);
zzultc 2008-07-09
  • 打赏
  • 举报
回复
我写的代码如下:
string date1 = txtDate.Value.ToString();//date1是从输入框获取
int year2 = Convert.ToInt32(date1.Substring(0, 4));
int month2 = Convert.ToInt32(date1.Substring(5, 7));
int date2 = Convert.ToInt32(date1.Substring(8, 9));
改为:
string date1 = txtDate.Value.ToString();//date1是从输入框获取
int year2 = Convert.ToInt32(date1.Substring(0, 4));
int month2 = Convert.ToInt32(date1.Substring(5, 2));
int date2 = Convert.ToInt32(date1.Substring(8, 2));
JGood 2008-07-09
  • 打赏
  • 举报
回复
在操作之前, 先用DateTime.Parse一下是否是正确的日期格式
zzultc 2008-07-09
  • 打赏
  • 举报
回复
Substring的的第二个参数是截取的长度,不是结尾的位置。
angellan 2008-07-09
  • 打赏
  • 举报
回复
楼上的你没我说的吧,或者是没有看清楚,我要截取用户输入的日期,不是系统当前日期,不过还是谢谢你
suyiming 2008-07-09
  • 打赏
  • 举报
回复
   
string t1='2008-07-09'
t1= t1.Replace("-", "|");//分页标识
string[] Content = NewsContent.Split(new char[] { '|' });//对内容进行拆分,并保存到数组

//获取内容

string t2=Content[0].ToString();//year
string t3=Content[1].ToString();//moth
string t4=Content[2].ToString();//day
conan304 2008-07-09
  • 打赏
  • 举报
回复
DateTime dt = System.DateTime.Now;
Console.WriteLine(dt);
Console.WriteLine(dt.Year);
Console.WriteLine(dt.Month);
Console.WriteLine(dt.Day);
/*
2008-7-9 17:54:15
2008
7
9
请按任意键继续. . .
*/

61,819

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧