如何用天、小时等显示计时器
How to display Timer with day, hour etc
我正在尝试创建一个 Timer
来记录用户 'Time Played',您可以预期 Timer
应该每秒都在滴答作响。我希望它显示为:
0d 12h 11m 23s
这是我目前拥有的:
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 12h 11m 23s
有谁知道我做错了什么吗?
两步:
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# 在 phone 上的工作原理。但如果你退出应用程序,你应该节省时间。一个超级简单的方法应该是像这样在文件中节省时间:
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);
}
}
要以“0d 12h 11m 23s”格式显示您的"time",请使用
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");
这里所有非格式字符(包括空格)都需要用反斜杠转义,反斜杠本身不需要转义,因为@verbatim 字符串。
我正在尝试创建一个 Timer
来记录用户 'Time Played',您可以预期 Timer
应该每秒都在滴答作响。我希望它显示为:
0d 12h 11m 23s
这是我目前拥有的:
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 12h 11m 23s
有谁知道我做错了什么吗?
两步:
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# 在 phone 上的工作原理。但如果你退出应用程序,你应该节省时间。一个超级简单的方法应该是像这样在文件中节省时间:
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);
}
}
要以“0d 12h 11m 23s”格式显示您的"time",请使用
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");
这里所有非格式字符(包括空格)都需要用反斜杠转义,反斜杠本身不需要转义,因为@verbatim 字符串。