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;
            }
        }

     效果图:

     

  • 相关阅读:
    ExtJS+DWR+Spring+Hibernate开发HRMS(5)
    ExtJS实战(9)疑难杂症分析
    ExtJS实战(8)CRUD+分页+复杂查询+排序
    ExtJS实战(7)登陆
    ExtJS+DWR+Spring+Hibernate开发HRMS(1)
    ExtJS+DWR+Spring+Hibernate开发HRMS(3)
    ExtJS实战(10)项目总结
    ExtJS+DWR+Spring+Hibernate开发HRMS(2)
    Hibernate QBC高级查询
    ExtJS+DWR+Spring+Hibernate开发HRMS(4)
  • 原文地址:https://www.cnblogs.com/artwl/p/1884886.html
Copyright © 2011-2022 走看看