导航

<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

随笔分类

随笔档案

文章档案

相册

 

// 格林威治时间转换为北京时间(2000年以后)
// 输入参数 年(2位),月,日,时,分,秒
void Calc( int y, int m, int d, int hh, int mm, int ss )
{
    
int w;        // 星期
    hh += 8;    // 格林威治时间 + 8 小时 = 北京时间

    
if( hh < 24 )    goto l_out;        // 没有跨天,则计算完成

    
///////////// 下面是跨天后的计算 /////////////////////////////
    hh -= 24;
    d 
++;        // 日期加一天

    
switch( m )        // 按月判断
    {
    
case 4:        case 6:                // 跨小月的判断
    case 9:        case 11:
        
if( d > 30 )
        
{
            d 
= 1;    m ++;
        }

        
break;

    
case 1:        case 3:                // 跨大月的判断
    case 5:        case 7:
    
case 8:        case 10:
        
if( d > 31 )
        
{
            d 
= 1;    m ++;
        }

        
break;

    
case 12:                        // 12 月,要判断是否跨年
        if( d > 31 )
        
{
            y 
++;    d = 1;    m = 1;
        }

        
break;

    
case 2:                            // 2 月,要判断是否是闰年
        if( ( (y+2000)%400 == 0 ) ||                        // 能被400整除,一定是闰年
            ( (y+2000)%4 ==0 ) && ( (y+2000)%100 !=0 ) )    // 能被4整除,但不能被100整除,一定是闰年
        {
            
if( d>29 )    // 闰年2月,可以有29号
            {
                m 
= 3;    d = 1;
            }

        }

        
else if( d>28 )    // 非闰年2月,可以有28号
        {
            m 
= 3; d = 1;
        }

        
break;
    }


l_out:    
// 计算完成,开始输出
    printf( "%04d.%02d.%02d - %02d:%02d:%02d", y+2000, m, d, hh, mm, ss);
    
if1 == m )
    
{
        y 
--;
        m 
= 13;
    }

    
else if2 == m )
    
{
        y 
--;
        m 
= 14;
    }


    w 
= y + y/4 + 26 * ( m + 1 ) / 10 + d - 1;
    w 
%= 7;        // 0 表示星期日

    printf ( 
" week=%d ", w );
}
posted on 2008-04-27 22:54 杨老师的茅屋 阅读(1276) 评论(4)  编辑 收藏
评论
  • # re: 格林威治时间转换为北京时间(单片机+GPS时使用)
    gaoqing000
    Posted @ 2008-04-28 18:25
    这么麻烦啊
  • # re: 格林威治时间转换为北京时间(单片机+GPS时使用)
    student
    Posted @ 2008-05-03 14:13
    谢谢,终于明白了!
  • # re: 格林威治时间转换为北京时间(单片机+GPS时使用)
    泥浆泵配件
    Posted @ 2008-09-23 02:05
    看上去较复杂。
  • # re: 格林威治时间转换为北京时间(单片机+GPS时使用)
    一个好人
    Posted @ 2008-09-24 15:25
    杨老师您好。我现在碰到个问题很棘手。
    我开发了一个Ocx控件,用在网页上。控件有一个成员变量m_IESink用来接管网页加载事件。现在的问题是,有时候浏览器会调用到m_IESink::OnFinalRelease。而一旦调用此函数毕竟会引发错误。我跟踪了一下,主要时候delete this引起的。
    如果杨老师有兴趣帮忙请给我个联系方式。我的msn:xuzzzhen124@hotmail.com。
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]

统计