2011-01-31 60 views
0

我试图将此内容转换为DateTime。转换为日期时间问题

DateTime dtmNextPayment = Convert.ToDateTime(DateTime.Now.AddMonths(1).Month.ToString() + "/" + DateTime.Now.Day.ToString() + "/" + DateTime.Now.AddYears(1).Year.ToString()); 

在这里,我收到一个异常“字符串未被识别为有效的日期时间”。我在哪里做错了?有人能帮助我吗?预先感谢您..

+0

这是一个非常糟糕的例子。其实我有不同的情况下不同的情况。我的意图是转换成月/日/年的形式。 – Ram 2011-01-31 19:00:04

+0

如果您不帮助我们帮助您,我们无法帮助您。给我们一个很好的例子来解决问题。 – jason 2011-01-31 19:03:41

回答

4

这里有很多问题。首先,你永远不想像你一样重复使用DateTime.Now。相反,

DateTime now = DateTime.Now; 

然后使用now。您这样做的原因是因为DateTime.Now可能会在两次呼叫之间转移到新的一天,一个月或一年。

当然,这并不能解决您的问题。现在我们来解决这个问题。你都清楚地试图一个月增加now,那么为什么不

DateTime dtmNextPayment = now.AddMonths(1); 

需要注意的是now.AddMonths(1)不发生变异now这是非常重要的;这就是为什么您必须将其分配给DateTime的新实例。

接下来,你的文章的原始版本有

DateTime dtmNextPayment = Convert.ToDateTime(DateTime.Now.AddMonths(1).Month.ToString() + "/" + DateTime.Now.Day.ToString() + "/" + DateTime.Now.Year.ToString()); 

DateTime.Now是2011年12月1日,这将产生

new DateTime(2011, 1, 1); 

我怀疑是你想要什么。你明白为什么?

你试图在

new DateTime(2012, 2, 1) 

编辑这个结果的日期是1月1日,2011年我怀疑这是你想要的大部分企业都还不到一个月,和一年账单提前。请停下来想一下。

此外,你会得到一个execption,例如,如果这一天是2011年1月31日,因为没有2011年2月31日(或2012年2月31日)对这一问题。这就是为什么你正在得到你现在得到的例外。明天(2011年2月1日)运行你的代码,这将是“很好”。

最后,不要做你正在做的事情,因为存在严重的文化问题。并非所有的文化格式都以您尝试设置格式的方式进行。

道德:DateTime已经内置的方法已经过测试,并避免所有这些该死的问题。使用它们。任何时候,当你试图对几乎任何对象进行逻辑处理时,都会将其中的一部分转换为字符串,然后再转换回来,从而引发严重的不良代码异味。

3

只是这样做:

DateTime dtmNextPayment = DateTime.Now.AddMonths(1); 

无需创建一个字符串,只是解析它右后卫DateTime对象。

0

你为什么不使用: DateTime dtmNextPayment = DateTime.Now.AddMonths(1);

0

试试这个:

DateTime dtmNextPayment = DateTime.Now.AddDays(1).AddMonths(1).AddYears(1); 

这里你得到的当前时间,以及加入了一天月份和年份。