转换为Datetime问题

时间:2011-01-31 18:52:56

标签: c# asp.net

我正在尝试将此内容转换为DateTime。

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

在这里,我得到一个例外“字符串未被识别为有效的日期时间”。我在哪里做错了?有人可以帮助我。提前谢谢..

4 个答案:

答案 0 :(得分: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)

当日期是2011年1月1日。我怀疑这是你想要的,因为大多数企业不会提前一个月和一年收费。请停下来思考一下。

此外,例如,如果当天是2011年1月31日,那么您将获得执行,因为没有2011年2月31日(或2012年2月31日)。这就是为什么你得到了你现在得到的例外。明天(2011年2月1日)运行你的代码,它会很“好”。

最后,不要做你正在做的事,因为有严重的文化问题。并非所有文化格式都与您尝试格式化的方式相符。

道德:DateTime具有已经过测试的内置方法,可以避免所有这些该死的问题。使用它们。任何时候你试图通过将部分对象转换为字符串然后转换回来对几乎任何对象进行逻辑操作,就会调用严重的代码异味。

答案 1 :(得分:3)

这样做:

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

无需创建字符串就可以直接将其解析回DateTime对象。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

试试这个:

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

在这里,您可以获得当前时间并添加一天,一个月和一年。