字符串到日期格式转换

时间:2013-11-22 18:05:52

标签: c# datetime

有没有办法我不必指定日/月/年的位数?

例如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”在某些情况下给我例外。

4 个答案:

答案 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" 的格式为dM,这会占每日/每月的单/双位数。

因此它适用于以下日期:

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()快。