杨老师之Blog
杨老师的茅屋
导航
VC知识库BLOG
首页
新随笔
联系
聚合
登录
<
2008年4月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
随笔分类
COM (22)
(rss)
VC (13)
(rss)
Math (7)
(rss)
文章 (1)
(rss)
随笔档案
2008年4月 (1)
2007年11月 (1)
2007年10月 (1)
2007年4月 (1)
2006年11月 (2)
2006年10月 (1)
2006年9月 (1)
2006年4月 (1)
2005年12月 (1)
2005年9月 (4)
2005年8月 (4)
2005年7月 (6)
2005年6月 (3)
2005年4月 (1)
2005年2月 (2)
2005年1月 (3)
2004年12月 (1)
2004年11月 (2)
2004年6月 (6)
2004年5月 (2)
文章档案
相册
(0)
简单图片 (23)
2008年4月27日
格林威治时间转换为北京时间(单片机+GPS时使用)
//
格林威治时间转换为北京时间(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);
if
(
1
==
m )
{
y
--
;
m
=
13
;
}
else
if
(
2
==
m )
{
y
--
;
m
=
14
;
}
w
=
y
+
y
/
4
+
26
*
( m
+
1
)
/
10
+
d
-
1
;
w
%=
7
;
//
0 表示星期日
printf (
"
week=%d
"
, w );
}
发表于
2008-04-27 22:54
杨老师的茅屋 阅读(1275) |
评论 (4)
|
编辑
收藏
统计
随笔 - 44
文章 - 0
评论 - 292
引用 - 0