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

 

 效果图:

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值