有没有办法我不必指定日/月/年的位数?
例如1/2/1991
我想要一种满足1/2 / 1991,11 / 3 / 1990,12 / 12/1991的方法
我不知道在一个月,一年或几天中会有多少位数。
我的代码是
string copy = splittedData[0] + splittedData[1] + splittedData[2];//date+month+year
DateTime datetime = DateTime.ParseExact(copy, "ddMMyyyy", CultureInfo.InvariantCulture);
DateTime dateAndTime = datetime;
问题是我不知道分割数据数组中的位数,因此上面的格式“ddMMyyyy”在某些情况下给我例外。
答案 0 :(得分:4)
由于您已经拥有了日期和年份,因此只需创建一个日期,其中三个就像这样;
DateTime date = new DateTime(year, month, day);
无需解析。您已经拥有了要创建日期的所有字段,并且您不需要将其设置为特殊格式来创建日期。
如果你不确定输入是否有效,那么将创建包装在try / catch块中以捕获 ArgumentOutOfRangeException 是否应该发生。
答案 1 :(得分:1)
由于您使用自己的代码更新了问题,因此可以使用以下分隔符连接日期组件:
string copy = splittedData[0] + "/" + splittedData[1] + "/" + splittedData[2];
稍后你可以这样做:
DateTime dt = DateTime.ParseExact(copy, "d/M/yyyy", CultureInfo.InvariantCulture);
我使用格式为"d/M/yyyy"
的格式为d
和M
,这会占每日/每月的单/双位数。
因此它适用于以下日期:
01/01/2013
1/01/2013
22/09/2013
02/9/2013
答案 2 :(得分:0)
DateTime.ParseExact专门用于不允许您要求的内容。不过,DateTime.Parse会允许它。
你说你有3个部分作为单独的字符串 - 如果你插入/
并解析,它应该成功(InvariantCulture预计订单月 - 日 - ):
string datetimeString = string.Join("/", new[] {month, day, year});
DateTime datetime = DateTime.Parse(datetimeString, CultureInfo.InvariantCulture);
或者您可以将它们转换为整数并直接构建DateTime
:
DateTime datetime = new DateTime(Convert.ToInt32(year), Convert.ToInt32(month), Convert.ToInt32(day));
答案 3 :(得分:0)
@ n00b说的是什么。你已经掌握了日期的各个组成部分:为什么要将它们重新组合在一起才能调用DateTime
解析例程?做这样的事情:
private static DateTime StringToDateTime( string year , string month , string day )
{
int yyyy = int.Parse(year) ;
int mm = int.Parse(month) ;
int dd = int.Parse(day) ;
DateTime dt = new DateTime(yyyy,mm,dd) ;
return dt ;
}
作为额外奖励,上述代码的运行速度可能会比DateTime.Parse()
或DateTime.ParseExact()
快。