13

我的代码中有这样的东西DateTime.Now.ToString("dd.MM.yy");,我需要给它加1周,就像5.4.2012变成12.4.2012我试图将它转换为int然后加起来,但是当它达到30时就会出现问题。

你能告诉我一些聪明的方法吗?

4

3 回答 3

31

您希望将其保留为 a DateTime,直到您准备好将其转换为字符串。

DateTime.Now.AddDays(7).ToString("dd.MM.yy");
于 2012-04-05T21:41:09.433 回答
6

首先,在您准备好显示或序列化它(例如,JSON 或保存在文件中)之前,始终将数据保持在其本机类型中。在添加或相乘之前,您不会将两个int变量转换为字符串,因此也不要使用日期。

保持原生类型有一些优点,例如将DateTime内部存储为 8 个字节,这比大多数字符串格式要小。但最大的优势是 .NET Framework 为您提供了一系列内置方法来执行日期和时间计算,以及从源字符串解析日期时间值。完整列表可以在这里找到

所以你的答案变成:

  • 从 获取当前时间戳DateTime.NowDateTime.Now.Date如果您宁愿使用午夜而不是当前时间,请使用。
  • 使用AddDays(7)一周后计算。请注意,此方法会自动考虑到下个月或下一年的滚动(如果适用)。闰日也为您考虑在内。
  • 使用您想要的格式将结果转换为字符串
// Current local server time + 7 days
DateTime.Now.AddDays(7).ToString("dd.MM.yy");

// Midnight + 7 days
DateTime.Now.Date.AddDays(7).ToString("dd.MM.yy");

框架中还有很多其他方法可以帮助:

  • 国际化
  • UTC 和时区(尽管您可能想查看NodaTime以获得更高级的应用程序)
  • 一些基本数学计算的运算符重载
  • TimeSpan处理时间间隔的类
于 2012-04-05T21:41:55.960 回答
1

任何你不能使用 AddDays 方法的原因

DateTime.Now.AddDays(7)
于 2012-04-05T21:41:49.777 回答