Stopwatch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| private void Countdown() { int countdownTime = 5000; Stopwatch stopwatch = Stopwatch.StartNew(); while (stopwatch.ElapsedMilliseconds < countdownTime) { int remainingTime = countdownTime - (int)stopwatch.ElapsedMilliseconds;
Console.WriteLine( @"Remaining Time: {0} milliseconds", remainingTime );
Thread.Sleep(1000); } Console.WriteLine(@"Countdown finished!"); }
|
Timer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| private System.Timers.Timer _mSecTimer;
private void StartClick(object sender, RoutedEventArgs e) { _pageData.IsStart = !_pageData.IsStart; if (_pageData.IsStart) { HideOuter(); string timeStr = GetTimeStr(); _timeSpan1 = TimeSpan.Parse(timeStr); UpdateTime(); _mSecTimer?.Close(); _mSecTimer = new System.Timers.Timer(); _mSecTimer.Interval = 1000; _mSecTimer.Elapsed += OnSecTimerElapsed; _mSecTimer.AutoReset = true;
_mSecTimer.Start(); } else { _mSecTimer?.Close(); } }
private void OnSecTimerElapsed(object sender, ElapsedEventArgs e) { if (_timeSpan1.TotalSeconds > 0) { _timeSpan1 -= TimeSpan.FromSeconds(1); Dispatcher.Invoke(UpdateTime); } else { _mSecTimer?.Close(); _pageData.IsStart = false; } }
private void UpdateTime() { HourTb.Text = $"{_timeSpan1.Hours:D2}"; MinuteTb.Text = $"{_timeSpan1.Minutes:D2}"; SecTb.Text = $"{_timeSpan1.Seconds:D2}"; }
private string GetTimeStr() { return $"{HourTn01.Num}{HourTn02.Num}:{MinuteTn01.Num}{MinuteTn02.Num}:{SecTn01.Num}{SecTn02.Num}"; }
|
UI线程的计时
1 2 3 4 5 6 7 8 9 10 11 12
| TimeSpan _timeSpan = TimeSpan.FromMinutes(3);
DispatcherTimer _dTimer = new DispatcherTimer(); _dTimer.Tick += OnTimer; _dTimer.Interval = TimeSpan.FromSeconds(1); _dTimer.IsEnabled = true; _dTimer.Start();
private void OnTimer(object sender, EventArgs e) { _timeSpan -= new TimeSpan.FromSeconds(1); }
|
日期处理
1
| string time = $"{_timeSpan.Minutes:D2}{_timeSpan.Seconds:D2}";
|
TimeSpan
在 C# 中,可以使用多种方式来初始化 TimeSpan 类的实例。
初始化
以下是常用的几种参数初始化方式:
使用时间单位的数值初始化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
TimeSpan timeSpan1 = new TimeSpan(0, 0, 10);
TimeSpan timeSpan2 = new TimeSpan(1, 30, 0);
TimeSpan timeSpan3 = new TimeSpan(2, 3, 15, 30);
TimeSpan timeSpan4 = new TimeSpan(1, 3, 15, 30, 500);
|
其中还有一个参数的方法,不建议使用。
使用总的时间间隔数值初始化:
1 2 3 4 5 6 7 8 9 10 11
| TimeSpan timeSpan1 = TimeSpan.FromSeconds(10);
TimeSpan timeSpan2 = TimeSpan.FromMinutes(90);
TimeSpan timeSpan3 = TimeSpan.FromDays(2) + TimeSpan.FromHours(3) + TimeSpan.FromMinutes(15) + TimeSpan.FromSeconds(30);
TimeSpan timeSpan4 = TimeSpan.FromHours(1) + TimeSpan.FromMinutes(15) + TimeSpan.FromSeconds(30) + TimeSpan.FromMilliseconds(500);
|
使用 TimeSpan.Parse 方法:
1 2 3 4 5 6 7
| TimeSpan timeSpan1 = TimeSpan.Parse("10:30");
TimeSpan timeSpan1 = TimeSpan.Parse("1:10:30");
TimeSpan timeSpan2 = TimeSpan.Parse("1.05:30:45.500");
|
这些是一些常用的初始化 TimeSpan 的方式,根据具体的需求选择适合的方式来初始化。
同时需要注意,TimeSpan 是一个不可变的结构体,一旦初始化后,其值是不能修改的,可以通过运算符和方法来对 TimeSpan 进行加减运算、比较等操作。
格式化
1 2 3
| TimeSpan timeSpan2 = TimeSpan.Parse("1.23:30:45.500");
Console.WriteLine(timeSpan2.ToString("hh'小时'mm'分钟'ss'秒'"));
|
获取总时长
1 2 3 4 5 6
| TimeSpan timeSpan2 = TimeSpan.Parse("1.05:30:45.500"); Console.WriteLine(timeSpan2.TotalDays); Console.WriteLine(timeSpan2.TotalHours); Console.WriteLine(timeSpan2.TotalMinutes); Console.WriteLine(timeSpan2.TotalSeconds); Console.WriteLine(timeSpan2.TotalMilliseconds);
|
结果
1.22969328703704
29.5126388888889
1770.75833333333
106245.5
106245500
时间戳
1 2 3 4 5 6 7 8 9 10 11
|
public static long TimestampTotalSeconds() { TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); long timestr = Convert.ToInt64(ts.TotalSeconds); return timestr; }
|