如何显示带日期、小时等的计时器

本文关键字:小时 计时器 日期 何显示 显示 | 更新日期: 2023-09-27 18:21:34

我正在尝试创建一个Timer,它记录用户的"播放时间",正如你所料,Timer应该每秒都在滴答作响。我希望它显示为:

0d 12小时11米23秒

这就是我目前所拥有的:

private void TimePlayedTimer_Start()
{ 
  timePlayedStr = "00:00:00:00";       
  timePlayed = new DispatcherTimer();
  timePlayed.Tick += timePlayedTimer_Tick;
  timePlayed.Interval = new TimeSpan(0, 0, 0, 1);
  timePlayed.Start();
}

timePlayedStr是从localStorage中检索到的内容,但在本例中,我只是将其设置为"00:00:00:00",以便更容易理解

然后我有一个tick事件:

void timePlayedTimer_Tick(object sender, object e)
{
  DateTime newDateTime = Convert.ToDateTime(timePlayedStr).AddSeconds(1);
  string newDateTimeStr = newDateTime .ToString("dd:HH:mm:ss");
}

所以我基本上希望它每tick增加一秒,然后当它达到60秒时,它会增加一分钟,然后是小时,然后是一天,但我希望它显示为:

0d 12小时11米23秒

有人知道我做错了什么吗?

如何显示带日期、小时等的计时器

要以"0d 12h 11m 23s"格式显示您的"时间",请使用

string newDateTimeStr = newDateTime.ToString("d'd ' H'h ' m'm ' s's'");

'之间的部分被逐字使用,而不是被解释为占位符。

编辑
当你有一个TimeSpan时,使用它来获得你的显示格式:

string displayTimeStr = storedTimespan.ToString(@"d'd' h'h' m'm' s's");

在这里,所有非格式字符(包括空格)都需要用反斜杠转义,因为@逐字逐句字符串,反斜杠本身不需要转义。

两个步骤:
1.
开始玩游戏时,请节省时间
2.
创建一个具有更新功能的计时器,并将实际时间减去开始的时间。然后你会得到一个TimeSpan,也就是播放的时间。

using System.Timers;
public class Test
{
    DateTime StartTime { get; set; }
    TimeSpan TimePlayed { get; set; }
    Timer Timer { get; set; }
    public Test()
    {
        Timer = new Timer() {Interval = 1000};
        Timer.Elapsed += Update;
        Timer.Start();
        StartTime = DateTime.Now;
    }
    private void Update(object sender, ElapsedEventArgs e)
    {
        TimePlayed = DateTime.Now - StartTime;
    }
}

当然,您可以执行.ToString(...)并获得您喜欢的格式,就像您在代码中所做的那样。

我不是应用程序开发人员,所以我不知道C#是如何在手机上工作的。但如果你退出应用程序,你应该节省时间。一个非常简单的方法应该是在这样的文件中节省时间:

private const string FileNameAndLocation = "yourfilename.txt";
private void AppClosing()
{
    using (StreamWriter sw = new StreamWriter(FileNameAndLocation))
    {
        sw.WriteLine(StartTime.ToString());
    }
}
private void AppStarting()
{
    if (!File.Exists(FileNameAndLocation))
    {
        StartTime = DateTime.Now;
        return;
    }
    using (StreamReader sr = new StreamReader(FileNameAndLocation))
    {
        var line = sr.ReadLine();
        StartTime = Convert.ToDateTime(line);
    }
}