【问题标题】:How to Add Custom Time Format?如何添加自定义时间格式?
【发布时间】:2014-10-20 02:33:56
【问题描述】:

我正在用 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));

但它给了我错误。

这是我的 Formv 的截图:

我希望将时间发布在该已用时间标签上,但它不起作用。这是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;

【问题讨论】:

  • 为什么要格式化所有这些字符串,然后再次解析它们?不要那样做......对于时间,你最好只保留一个Stopwatch,你可以询问经过的时间。 (我也强烈建议不要使用公共变量,不要在变量名中使用下划线,也不要使用仅按数字变化的多个名称......)

标签: c# winforms datetime error-handling


【解决方案1】:

不太确定我是否了解所有这些解析,但如果您只是想记录开始和停止时间并输出时间跨度,我会按照 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();
}

【讨论】:

  • 谢谢,我会试试的。
【解决方案2】:

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

因此,您对string 的转换应该是您堆栈的最高级别。它将使您的代码更简洁,并且如果合适的话,以后可以更容易地从 UI 中重构逻辑。

【讨论】:

  • 实际上,我想将它发送到数据库但它不起作用,所以我希望它出现在水晶报告中,所以现在我又遇到了一个问题,我想将我的变量发送到我的数据库所以它不起作用我试图找到一个解决方案
  • 我会对数据库使用相同的方法。将字段保留为 DateTime。然后,为您的报告处理存储过程(或视图)中的格式。 SQL 的日期格式很棒。
猜你喜欢
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多