zoukankan      html  css  js  c++  java
  • WinForm(C#)倒计时(年月日时分秒)

    一个朋友提到这个问题,就随手写了一个,本以为很容易,却写了差不多半个小时,关键是年月的判断,现把代码贴出来供需要的朋友参考,也希望能看到大家的计算方法,先在WinForm窗体上放一个label控件(ID为lblShow) 和一个Timer控件(ID为timerMain),后台代码如下:

        public partial class FormTime : Form
        {
            
    public FormTime()
            {
                InitializeComponent();
            }

            
    private void FormTime_Load(object sender, EventArgs e)
            {
                timerMain.Enabled 
    = true;
                timerMain.Interval 
    = 1000;
                timerMain.Start();
            }

            
    private void timerMain_Tick(object sender, EventArgs e)
            {
                DateTime observeTime 
    = DateTime.Parse("2023-11-22 22:45:30");//倒计时日期
                DateTime now = DateTime.Now;    //当前时间
                TimeSpan ts = observeTime.Subtract(now);    //两个时间之差
                StringBuilder result=new StringBuilder();   //存放结果
                int year=observeTime.Year - now.Year;       //得到相差的年
                int month = observeTime.Month - now.Month;  //得到相差的月
                int day = observeTime.Day - now.Day;        //得到相差的日

                
    int hmh=(observeTime.Hour-now.Hour)*3600+(observeTime.Minute-now.Minute)*60+(observeTime.Second-now.Second);

                
    //如果时分秒比现在的时间晚
                if(hmh<=0)
                {
                    
    //向日借一
                    day--;
                    
    if((day<=0&&month>0)||(day<=0&&year>0))
                    {
                        
    //如果天数小于0向月借一
                        day=GetDay(now.Year, now.Month)- now.Day + observeTime.Day;
                        month
    --;
                        
    if(month<0&&year>0)
                        {
                            
    //如果月数小于0,向年借一,同时把月专为正数
                            month += 12;
                            year
    --;
                        }
                    }
                }


                
    //如果天数小于0向月借一
                if ((day < 0 && month > 0|| (day < 0 && year > 0))
                {
                    day 
    = GetDay(now.Year, now.Month) - now.Day + observeTime.Day;
                    month
    --;
                    
    if (month < 0 && year > 0)
                    {
                        
    //如果月数小于0,向年借一,同时把月专为正数
                        month += 12;
                        year
    --;
                    }
                }

                
    //如果月数小于0,向年借一,同时把月专为正数
                if (month < 0 && year > 0)
                {
                    month 
    += 12;
                    year
    --;
                }

                
    if (year<0||(year == 0 && month < 0)||(year == 0 && month==0&&day<0))
                {
                    lblShow.Text 
    = "已超过日期";
                    
    return;
                }

                
    if (year> 0)
                {
                    result.Append(year
    + "");
                }
                
    if (month> 0)
                {
                    result.Append(month
    + "");
                }
                
    if (day> 0)
                {
                    result.Append(day
    + "");
                }
                
    if (ts.Hours > 0)
                {
                    result.Append(ts.Hours 
    + "");
                }
                
    if (ts.Minutes > 0)
                {
                    result.Append(ts.Minutes 
    + "");
                }
                
    if (ts.Seconds > 0)
                {
                    result.Append(ts.Seconds 
    + "");
                }
                
    if(result.Length==0)
                {
                    result.Append(
    "已超过日期");
                }
                lblShow.Text 
    = result.ToString();
            }

            
    //输入月份后获得该月天数
            private int GetDay(int year, int month)
            {
                
    int result = 31;
                
    switch (month)                           
                {
                    
    case 4:
                    
    case 6:
                    
    case 9:
                    
    case 11:
                        result 
    = 30;
                        
    break;
                    
    case 2:
                        
    if ((year % 100 != 0&& (year% 4 == 0|| (year% 400 == 0))
                        {
                            result 
    = 29;
                        }
                        
    else
                        {
                            result 
    = 28;
                        }
                        
    break;
                }
                
    return result;
            }
        }

     效果图:

     

  • 相关阅读:
    转载 Spring boot中配置事务管理
    Mybatis Plus条件构造器condition动态判断优化
    【转载】 利用p6spy拦截并查看数据库执行操作
    使用P6Spy监控你的Spring boot数据库操作
    【转载】 《SpringBoot2.0 实战》系列-集成Quartz定时任务(持久化到数据库)
    baomidou的dynamic-datasource读写分离实现和加入AOP根据方法名选择库
    @EnableWebMvc 注解会让Swagger无效访问的问题
    RestTemplate发送请求并携带header信息
    Shell/Linux 将一个文件中的每两行合并成一行
    蛋白质印迹法(免疫印迹试验,Western Blot)
  • 原文地址:https://www.cnblogs.com/artwl/p/1884886.html
Copyright © 2011-2022 走看看