如果条件不按预期工作c#

时间:2017-08-30 15:49:19

标签: c#

这现在困扰着我,我已经尝试过去一小时修复它但仍然没有运气!

我希望有人能发现我做错了什么。这是我的代码:

diff --git a/sensu.logrotate b/sensu.logrotate
index 8457e29..a5178fa 100644
--- a/sensu.logrotate
+++ b/sensu.logrotate
@@ -1,4 +1,5 @@
 /var/log/sensu/sensu-client.log {
+    su sensu sensu
     rotate 7
     daily
     missingok
@@ -11,6 +12,7 @@
 }

 /var/log/sensu/sensu-server.log {
+    su sensu sensu
     rotate 7
     daily
     missingok
@@ -23,6 +25,7 @@
 }

 /var/log/sensu/sensu-api.log {
+    su sensu sensu
     rotate 7
     daily
     missingok
我在做错了什么?

5 个答案:

答案 0 :(得分:6)

重复问题如下: C# Number of days between two dates problem

Timespan.TotalDays可能是否定的。因此,在您的情况下,几乎可以保证lastAction - 今天将是负数,因此总是小于30。

如果您只关心天数的绝对值,请使用Math.Abs,否则请重新排列,以便从今天(today - lastAction)减去lastAction。 请注意,由于四舍五入,如果差异少于1天,您的情况仍然不会被触发。

答案 1 :(得分:2)

您是否有可能从较小的值(lastaction)中减去较大的值(今天),这会导致负数使得天数为负数?

那你确实需要对字符串进行显式解析才能使它成为日期:

DateTime lastAction = DateTime.Parse("2017-03-07 12:47:58
     .967");

答案 2 :(得分:2)

一些事情。

首先你不能像这样将字符串转换为DateTime。你应该做这样的事情。 DateTime lastAction = DateTime.Parse("2017-03-07 12:47:58.967");

第二,正如@MikeS所说的那样,你正在减去今天的lastAction,这会产生一个负数(在这种情况下它就像-173)。你应该翻转那句话。 double totalDays = ( today - lastAction).TotalDays;

你的整个部分应该是这样的。

var maxDays = 30;
DateTime today = DateTime.Now; //todays date
DateTime lastAction = DateTime.Parse("2017-03-07 12:47:58.967");
double totalDays = ( today - lastAction).TotalDays;
var days = Math.Round(totalDays);
if (days > maxDays)
{
    // now this is hit
}

答案 3 :(得分:0)

感谢您的帮助。我做了一些蠢事......我有

double totalDays = (lastAction - today).TotalDays; // returns -176

将我的代码更改为:

 double totalDays = (today - lastAction).TotalDays; //returns 176

答案 4 :(得分:0)

你的第一个问题: 您没有将字符串解析为DateTime。

DateTime lastAction = Convert.ToDateTime("2017-03-07 12:47:58.967");

你的第二个问题: 您收到一个负值,并检查它是否更大。

var days = (Math.Round(totalDays)) * (-1);

像这样,它应该有用。