这现在困扰着我,我已经尝试过去一小时修复它但仍然没有运气!
我希望有人能发现我做错了什么。这是我的代码:
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
我在做错了什么?
答案 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);
像这样,它应该有用。