C# 计算剩余时间

csharp 复制代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;

namespace 倒计时
{
    class Program
    {
        static Timer timer = new Timer();
        static DateTime endTime;
        static string fileName = "countdown.txt";

        static void Main(string[] args)
        {
            LoadCountdown(); // 读取倒计时信息

            // 设置计时器
            timer.Interval = 1000; // 每秒触发一次
            timer.Elapsed += Timer_Elapsed;
            timer.Enabled = true;

            Console.WriteLine("倒计时开始,将在{0}结束。", endTime);

            Console.ReadLine();
        }

        static void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            TimeSpan duration = endTime - DateTime.Now; // 计算时间差

            if (duration.TotalSeconds <= 0) // 时间到了
            {
                timer.Enabled = false; // 停止计时器
                Console.WriteLine("时间到了!");

                SaveCountdown(DateTime.MinValue); // 清除倒计时信息
            }
            else // 显示剩余时间
            {
                Console.WriteLine("剩余时间:{0}小时{1}分钟{2}秒", (int)duration.TotalHours, (int)duration.TotalMinutes % 60, (int)duration.TotalSeconds % 60);

                SaveCountdown(endTime); // 保存倒计时信息
            }
        }

        static void LoadCountdown()
        {
            if (File.Exists(fileName)) // 文件存在
            {
                string content = File.ReadAllText(fileName); // 读取文件内容

                if (!string.IsNullOrEmpty(content)) // 文件内容不为空
                {
                    DateTime savedTime = DateTime.Parse(content); // 解析保存的时间
                    TimeSpan duration = savedTime - DateTime.Now; // 计算时间差

                    if (duration.TotalSeconds > 0) // 时间还没到
                    {
                        endTime = savedTime; // 恢复结束时间
                        return;
                    }
                }
            }

            // 文件不存在或者时间已经到了,重新开始倒计时
            DateTime startTime = DateTime.Now;
            endTime = startTime.AddMinutes(20);
        }

        static void SaveCountdown(DateTime time)
        {
            File.WriteAllText(fileName, time.ToString()); // 保存时间到文件
        }
    }
}
相关推荐
水煮庄周鱼鱼44 分钟前
C# 入门简介
开发语言·c#
软件黑马王子1 小时前
Unity游戏制作中的C#基础(6)方法和类的知识点深度剖析
开发语言·游戏·unity·c#
Nicole Potter2 小时前
请说明C#中的List是如何扩容的?
开发语言·面试·c#
gu204 小时前
c#编程:学习Linq,重几个简单示例开始
开发语言·学习·c#·linq
pchmi8 小时前
CNN常用卷积核
深度学习·神经网络·机器学习·cnn·c#
yuanpan8 小时前
23种设计模式之《组合模式(Composite)》在c#中的应用及理解
开发语言·设计模式·c#·组合模式
滴_咕噜咕噜9 小时前
C#基础总结:常用的数据结构
开发语言·数据结构·c#
万兴丶13 小时前
Unity 适用于单机游戏的红点系统(前缀树 | 数据结构 | 设计模式 | 算法 | 含源码)
数据结构·unity·设计模式·c#
程序猿多布14 小时前
C#设计模式 学习笔记
设计模式·c#
软件黑马王子20 小时前
Unity游戏制作中的C#基础(5)条件语句和循环语句知识点全解析
游戏·unity·c#