从标签和属性.系统.默认添加小时数

本文关键字:添加 小时 默认 系统 标签 属性 | 更新日期: 2023-09-27 17:56:33

我已经疯狂了一个计数器,这是一个简单的计数器,从 00:00:00 开始,每秒递增一次我将为此提供我的代码

在表单加载事件中,我已经写了这个

 private DateTime startTime; 
        private void Form7_Load(object sender, EventArgs e)
        {
            startTime = DateTime.Now; 
            timer1.Start();
        }
 private void timer1_Tick(object sender, System.EventArgs e)
            {
                counter_label.Text = (DateTime.Now - startTime)
.ToString(@"hh':mm':ss");
            }

计时器设置为 1000 表示 1 秒,所以我的计时器工作正常但是现在我想将标签.文本保存到位于属性中的wform设置.settings.default所以我通过以下方式保存了文本

private void Form7_FormClosing(object sender, FormClosingEventArgs e)
        {
            DateTime st;
            DateTime end;
            st = Convert.ToDateTime(Properties.Settings.Default.datetime);
            end = Convert.ToDateTime(counter_label.Text);
            Properties.Settings.Default.datetime = counter_label.Text;
          total_label.Text = (st + end ).ToString(@"hh':mm':ss");// this is not happening
          Properties.Settings.Default.datetime = total_label.Text;
            Properties.Settings.Default.Save();
        }

错误是操作数 + 无法应用于 System.datetime 和 System.datetime我的意图是。当我将文本保存到系统属性时。 在表单关闭事件中,必须保存新的更新结果。系统属性中的旧文本和counter_label中的新文本。怎么能做到呢?

从标签和属性.系统.默认添加小时数

不能添加两个日期时间对象。我相信您的counter_label具有TimeSpan值,因为它的格式是00:00:00,您可以将其解析为TimeSpan然后将其添加到您的st DateTime类型对象中。

TimeSpan ts = TimeSpan.Parse(counter_label.Text);
total_label.Text = st.Add(ts).ToString(@"hh':mm':ss");

不要使用string类型的设置来存储对象TimeSpan(正如 Habib 已经说过的那样,减去或添加DateTime对象会产生TimeSpan)。您应该Settings.settings文件中创建类型为 System.TimeSpan 的设置(例如,使用名称 TotalTime)。

储蓄:

Properties.Settings.Default.TotalTime = (DateTime.Now - startTime);
Properties.Settings.Default.Save();

加载(这是技巧 - 您正在减去当前时间剩余的时间。因此,如果您还剩两分钟,则开始时间将设置为在开始应用程序之前两分钟,就像您从未关闭它一样):

startTime = DateTime.Now.Subtract(Properties.Settings.Default.TotalTime);

因此,您不需要解析任何字符串。使用 DateTime 和 TimeSpan,让 .NET 为你完成所有持久化工作。


更新(所有代码):

DateTime startTime;
private void timer1_Tick(object sender, EventArgs e)
{
    label1.Text = (DateTime.Now - startTime).ToString(@"hh':mm':ss");
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    timer1.Stop();
    Properties.Settings.Default.TotalTime = (DateTime.Now - startTime);
    Properties.Settings.Default.Save();
}
private void Form1_Load(object sender, EventArgs e)
{
    startTime = DateTime.Now.Subtract(Properties.Settings.Default.TotalTime);
    timer1.Start();
}

如果是首次运行应用程序,则Properties.Settings.Default.TotalTime将返回默认值 TimeSpan(即零时间跨度)。因此,从当前时间中减去它将返回与当前时间相同的值。

运算符 + 定义如下:

public static DateTime operator +(
    DateTime d,
    TimeSpan t
)

将指定的时间间隔添加到指定的日期和时间,从而生成新的日期和时间。*您只能添加(+)时间跨度到日期时间!!!*修复代码:

TimeSpan sp = TimeSpan.Parse(counter_label.Text);
total_label.Text = (st+sp).ToString(@"hh':mm':ss");

两个DateTime之间的区别不是另一个DateTime,而是一个TimeSpan。所以你要坚持的不是一瞬间,而是总运行时间,应该是TimeSpan