如何添加自定义时间格式?

时间:2014-08-26 17:04:23

标签: c# winforms datetime error-handling

我在C#中制作NetcafeProgram,我希望得到当前的DateTime。我希望我的输出像这样(hr.mins)“0.25”。我有当前的DateTime但我想在labelTime_1中显示它(hr.mins)“0.25”,但它不起作用。这是我使用的命令

starttime_1 = DateTime.Now.ToString("h:mm:ss tt");

我将其改为

starttime_1 = DateTime.Now.ToString("h.mm");

然后我想得到像这样的持续时间

TimeSpan duration = DateTime.Parse(endtime_1).Subtract(DateTime.Parse(starttime_1));

但它给了我错误。

以下是My Formv的屏幕截图:

enter image description here

我希望有时间在那个经过时间的标签上发布,但它不起作用。这是BtnStop1的编码

private void btnStop_1_Click(object sender, EventArgs e)
{
    //string duration = Convert.ToInt32(((starttime_1) - (endtime_1)));
    gbx_1.BackColor = Color.LimeGreen;
    btnStop_1.Enabled = false;
    //endtime_1 = DateTime.Now.ToString("h:mm:ss tt");
    //TimeSpan duration = DateTime.Parse(endtime_1).Subtract(DateTime.Parse(starttime_1));
    endtime_1 = DateTime.Now.ToString("h.mm tt");
    TimeSpan duration = DateTime.Parse(endtime_1).Subtract(DateTime.Parse(starttime_1));
    lblTime_1.Text = Convert.ToString(duration);
    string var = "Cabin One is Free";
    btnStart_1.Enabled = true;
    HP_1.Enabled = true;
    CR_1.Enabled = true;
    reader = new SpeechSynthesizer();
    reader.SpeakAsync(var);
}

BtnStart的编码

private void btnStart_1_Click(object sender, EventArgs e)
{
    gbx_1.BackColor = Color.Red;
    btnStart_1.Enabled = false;
    //starttime_1 = DateTime.Now.ToString("h:mm:ss tt");
    starttime_1 = DateTime.Now.ToString("h.mm tt");
    lblTime_1.Text = "CountingTime";
    string var = "Cabin One is Occupied";
    reader = new SpeechSynthesizer();
    reader.SpeakAsync(var);
    HP_1.Enabled = false;
    CR_1.Enabled = false;
}

这是我的变量

public string starttime_1;
public string starttime_2;
public string starttime_3;
public string starttime_4;
public string starttime_5;
public string starttime_6;
public string endtime_1;
public string endtime_2;
public string endtime_3;
public string endtime_4;
public string endtime_5;
public string endtime_6;

2 个答案:

答案 0 :(得分:1)

我强烈建议您将变量类型更改为DateTime?。最好将数据存储在其本机类型中,然后在显示时转换为字符串。这样,当您想要持续时间时,您不会解析回DateTime。您可以在基础数据上处理任何所需的舍入。

因此,您转换为string应该是您堆叠的最高级别。它将使您的代码更加清晰,并在以后适当时更容易从UI重构逻辑。

答案 1 :(得分:0)

我不太确定我理解所有这些解析但是如果你只是想记录开始和停止时间并输出一个时间跨度,我会像Jon Skeet推荐的那样使用秒表。这些方面的东西看起来像你想要的但是更清洁。

// Build stopwatch and lists
Stopwatch sw = new Stopwatch();
List<string> startTimes = new List<string>();
List<string> endTimes = new List<string>();

private void startBtn_Click(object sender, EventArgs e)
{
    // Start stopwatch and record start time
    sw.Start();
    startTimes.Add(DateTime.Now.ToString("h.mm"));
}

private void stopBtn_Click(object sender, EventArgs e)
{
    // Stop stopwatch
    sw.Stop();

    // Record stop time and reset stopwatch
    endTimes.Add(DateTime.Now.ToString("h.mm"));
    sw.Reset();

    // Output timespan
    outputLbl.Text = sw.Elapsed.ToString();
}