比较现在的日期时间和日期时间添加分钟然后覆盖文本文件
Compare between date time now and date time add minutes then overwrite the text file
我创建了一个调用 total-cost.txt
的文件,我想比较两个时间,即当前时间和添加分钟后的时间。
我试过了,这是我的代码
private void OverwriteText()
{
DateTime dn = DateTime.Now;
DateTime now= dn.AddMinutes(2);
if (dn > now )
{
dn = now;
string txt = Convert.ToString(TotCostLong);
using (FileStream fs = new FileStream("total-cost.txt", FileMode.Truncate))
{
using (StreamWriter writer = new StreamWriter(fs))
{
writer.Write(txt);
}
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
OverwriteText();
}
在我的想法中,如果当前时间到达加上 2 分钟的时间,它将覆盖文本文件。
例如,当前时间是 11.30,然后在当前时间 11.32 上加 2 分钟。达到 11.32 后文件将被覆盖。
如有任何想法或解决方案,不胜感激
您可以像下面这样比较,而不是添加分钟
DateTime now= DateTime.Now;
if((before - now).TotalMinutes > 2) {}
DateTime before = now;
如果你想尝试一些不同的东西,可以使用 observable 对其进行反应式扩展。 https://github.com/dotnet/reactive 并要求 Rx.NET
Observable.Interval(TimeSpan.FromMinute(2), DispatcherScheduler.Current)
.Subscribe(
x =>
{
string txt = Convert.ToString(TotCostLong);
File.WriteAllText("total-cost.txt", txt);
});
您可以做的 Simplest thing
来实现您想要的是,您应该将 timer interval
更新为 2 分钟 ,然后它会在每 2 分钟一次,您无需检查任何内容,只需覆盖文件即可。
var timer = new System.Threading.Timer(
e => OverwriteText(),
null,
TimeSpan.Zero,
TimeSpan.FromMinutes(2)
);
private void OverwriteText()
{
string txt = Convert.ToString(TotCostLong);
using (FileStream fs = new FileStream("total-cost.txt", FileMode.Truncate))
{
using (StreamWriter writer = new StreamWriter(fs))
{
writer.Write(txt);
}
}
}
As you explicitly ask to help with the time comparison option, check answer below. However, this is wasting resources and I'd recommend to use timer for that, just set its interval to 120000ms and you are done
要使您的代码正常工作,您需要 'remember' 当前时间,而不是在每次方法调用时都替换它。只需将其放入私有字段并在写入文件后将其重置。
private DateTime _lastWriteTime = DateTime.Now;
private void OverwriteText()
{
if ((DateTime.Now - _lastWriteTime).TotalMinutes > 2)
{
string txt = Convert.ToString(TotCostLong);
File.WriteAllText("total-cost.txt", txt);
_lastWriteTime = DateTime.Now;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
OverwriteText();
}
每一秒(您调用 OverwriteText()
的时间间隔)您将获得当前时间并减去上次写入文件时的时间 _lastWriteTime
。结果是 TimeSpan,所以这个值每秒都会增长,一旦它大于 2 分钟,你就会进入 if block.
我创建了一个调用 total-cost.txt
的文件,我想比较两个时间,即当前时间和添加分钟后的时间。
我试过了,这是我的代码
private void OverwriteText()
{
DateTime dn = DateTime.Now;
DateTime now= dn.AddMinutes(2);
if (dn > now )
{
dn = now;
string txt = Convert.ToString(TotCostLong);
using (FileStream fs = new FileStream("total-cost.txt", FileMode.Truncate))
{
using (StreamWriter writer = new StreamWriter(fs))
{
writer.Write(txt);
}
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
OverwriteText();
}
在我的想法中,如果当前时间到达加上 2 分钟的时间,它将覆盖文本文件。
例如,当前时间是 11.30,然后在当前时间 11.32 上加 2 分钟。达到 11.32 后文件将被覆盖。
如有任何想法或解决方案,不胜感激
您可以像下面这样比较,而不是添加分钟
DateTime now= DateTime.Now;
if((before - now).TotalMinutes > 2) {}
DateTime before = now;
如果你想尝试一些不同的东西,可以使用 observable 对其进行反应式扩展。 https://github.com/dotnet/reactive 并要求 Rx.NET
Observable.Interval(TimeSpan.FromMinute(2), DispatcherScheduler.Current)
.Subscribe(
x =>
{
string txt = Convert.ToString(TotCostLong);
File.WriteAllText("total-cost.txt", txt);
});
您可以做的 Simplest thing
来实现您想要的是,您应该将 timer interval
更新为 2 分钟 ,然后它会在每 2 分钟一次,您无需检查任何内容,只需覆盖文件即可。
var timer = new System.Threading.Timer(
e => OverwriteText(),
null,
TimeSpan.Zero,
TimeSpan.FromMinutes(2)
);
private void OverwriteText()
{
string txt = Convert.ToString(TotCostLong);
using (FileStream fs = new FileStream("total-cost.txt", FileMode.Truncate))
{
using (StreamWriter writer = new StreamWriter(fs))
{
writer.Write(txt);
}
}
}
As you explicitly ask to help with the time comparison option, check answer below. However, this is wasting resources and I'd recommend to use timer for that, just set its interval to 120000ms and you are done
要使您的代码正常工作,您需要 'remember' 当前时间,而不是在每次方法调用时都替换它。只需将其放入私有字段并在写入文件后将其重置。
private DateTime _lastWriteTime = DateTime.Now;
private void OverwriteText()
{
if ((DateTime.Now - _lastWriteTime).TotalMinutes > 2)
{
string txt = Convert.ToString(TotCostLong);
File.WriteAllText("total-cost.txt", txt);
_lastWriteTime = DateTime.Now;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
OverwriteText();
}
每一秒(您调用 OverwriteText()
的时间间隔)您将获得当前时间并减去上次写入文件时的时间 _lastWriteTime
。结果是 TimeSpan,所以这个值每秒都会增长,一旦它大于 2 分钟,你就会进入 if block.