Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
天中雨水
rt-thread
提交
e809ced6
R
rt-thread
项目概览
天中雨水
/
rt-thread
该项目与 Fork 源项目分叉
Fork自
RT-Thread / rt-thread
通知
2
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e809ced6
编写于
5月 16, 2019
作者:
S
SummerGift
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
【完善】格式化 minilibc/time.c
上级
9f300de9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
152 addition
and
152 deletion
+152
-152
components/libc/compilers/minilibc/time.c
components/libc/compilers/minilibc/time.c
+152
-152
未找到文件。
components/libc/compilers/minilibc/time.c
浏览文件 @
e809ced6
...
...
@@ -11,20 +11,20 @@
/* days per month -- nonleap! */
const
short
__spm
[
13
]
=
{
0
,
{
0
,
(
31
),
(
31
+
28
),
(
31
+
28
+
31
),
(
31
+
28
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
+
30
+
31
),
};
(
31
+
28
),
(
31
+
28
+
31
),
(
31
+
28
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
+
30
+
31
),
};
static
long
int
timezone
;
static
const
char
days
[]
=
"Sun Mon Tue Wed Thu Fri Sat "
;
static
const
char
months
[]
=
"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec "
;
...
...
@@ -34,183 +34,183 @@ static const char months[] = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ";
int
__isleap
(
int
year
)
{
/* every fourth year is a leap year except for century years that are
* not divisible by 400. */
/* return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); */
return
(
!
(
year
%
4
)
&&
((
year
%
100
)
||
!
(
year
%
400
)));
/* every fourth year is a leap year except for century years that are
* not divisible by 400. */
/* return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); */
return
(
!
(
year
%
4
)
&&
((
year
%
100
)
||
!
(
year
%
400
)));
}
struct
tm
*
gmtime_r
(
const
time_t
*
timep
,
struct
tm
*
r
)
{
time_t
i
;
register
time_t
work
=
*
timep
%
(
SPD
);
r
->
tm_sec
=
work
%
60
;
work
/=
60
;
r
->
tm_min
=
work
%
60
;
r
->
tm_hour
=
work
/
60
;
work
=
*
timep
/
(
SPD
);
r
->
tm_wday
=
(
4
+
work
)
%
7
;
for
(
i
=
1970
;;
++
i
)
{
register
time_t
k
=
__isleap
(
i
)
?
366
:
365
;
if
(
work
>=
k
)
work
-=
k
;
else
break
;
}
r
->
tm_year
=
i
-
1900
;
r
->
tm_yday
=
work
;
r
->
tm_mday
=
1
;
if
(
__isleap
(
i
)
&&
(
work
>
58
))
{
if
(
work
==
59
)
r
->
tm_mday
=
2
;
/* 29.2. */
work
-=
1
;
}
for
(
i
=
11
;
i
&&
(
__spm
[
i
]
>
work
);
--
i
)
;
r
->
tm_mon
=
i
;
r
->
tm_mday
+=
work
-
__spm
[
i
];
return
r
;
time_t
i
;
register
time_t
work
=
*
timep
%
(
SPD
);
r
->
tm_sec
=
work
%
60
;
work
/=
60
;
r
->
tm_min
=
work
%
60
;
r
->
tm_hour
=
work
/
60
;
work
=
*
timep
/
(
SPD
);
r
->
tm_wday
=
(
4
+
work
)
%
7
;
for
(
i
=
1970
;;
++
i
)
{
register
time_t
k
=
__isleap
(
i
)
?
366
:
365
;
if
(
work
>=
k
)
work
-=
k
;
else
break
;
}
r
->
tm_year
=
i
-
1900
;
r
->
tm_yday
=
work
;
r
->
tm_mday
=
1
;
if
(
__isleap
(
i
)
&&
(
work
>
58
))
{
if
(
work
==
59
)
r
->
tm_mday
=
2
;
/* 29.2. */
work
-=
1
;
}
for
(
i
=
11
;
i
&&
(
__spm
[
i
]
>
work
);
--
i
)
;
r
->
tm_mon
=
i
;
r
->
tm_mday
+=
work
-
__spm
[
i
];
return
r
;
}
struct
tm
*
localtime_r
(
const
time_t
*
t
,
struct
tm
*
r
)
{
time_t
tmp
;
struct
timezone
tz
=
{
0
};
gettimeofday
(
0
,
&
tz
);
timezone
=
tz
.
tz_minuteswest
*
60L
;
tmp
=
*
t
+
timezone
;
return
gmtime_r
(
&
tmp
,
r
);
time_t
tmp
;
struct
timezone
tz
=
{
0
};
gettimeofday
(
0
,
&
tz
);
timezone
=
tz
.
tz_minuteswest
*
60L
;
tmp
=
*
t
+
timezone
;
return
gmtime_r
(
&
tmp
,
r
);
}
struct
tm
*
localtime
(
const
time_t
*
t
)
{
static
struct
tm
tmp
;
return
localtime_r
(
t
,
&
tmp
);
static
struct
tm
tmp
;
return
localtime_r
(
t
,
&
tmp
);
}
time_t
mktime
(
struct
tm
*
const
t
)
{
register
time_t
day
;
register
time_t
i
;
register
time_t
years
=
t
->
tm_year
-
70
;
if
(
t
->
tm_sec
>
60
)
{
t
->
tm_min
+=
t
->
tm_sec
/
60
;
t
->
tm_sec
%=
60
;
}
if
(
t
->
tm_min
>
60
)
{
t
->
tm_hour
+=
t
->
tm_min
/
60
;
t
->
tm_min
%=
60
;
}
if
(
t
->
tm_hour
>
24
)
{
t
->
tm_mday
+=
t
->
tm_hour
/
24
;
t
->
tm_hour
%=
24
;
}
if
(
t
->
tm_mon
>
12
)
{
t
->
tm_year
+=
t
->
tm_mon
/
12
;
t
->
tm_mon
%=
12
;
}
while
(
t
->
tm_mday
>
__spm
[
1
+
t
->
tm_mon
])
{
if
(
t
->
tm_mon
==
1
&&
__isleap
(
t
->
tm_year
+
1900
))
{
--
t
->
tm_mday
;
}
t
->
tm_mday
-=
__spm
[
t
->
tm_mon
];
++
t
->
tm_mon
;
if
(
t
->
tm_mon
>
11
)
{
t
->
tm_mon
=
0
;
++
t
->
tm_year
;
}
}
if
(
t
->
tm_year
<
70
)
return
(
time_t
)
-
1
;
/* Days since 1970 is 365 * number of years + number of leap years since 1970 */
day
=
years
*
365
+
(
years
+
1
)
/
4
;
/* After 2100 we have to substract 3 leap years for every 400 years
This is not intuitive. Most mktime implementations do not support
dates after 2059, anyway, so we might leave this out for it's
bloat. */
if
(
years
>=
131
)
{
years
-=
131
;
years
/=
100
;
day
-=
(
years
>>
2
)
*
3
+
1
;
if
((
years
&=
3
)
==
3
)
years
--
;
day
-=
years
;
}
day
+=
t
->
tm_yday
=
__spm
[
t
->
tm_mon
]
+
t
->
tm_mday
-
1
+
(
__isleap
(
t
->
tm_year
+
1900
)
&
(
t
->
tm_mon
>
1
));
/* day is now the number of days since 'Jan 1 1970' */
i
=
7
;
t
->
tm_wday
=
(
day
+
4
)
%
i
;
/* Sunday=0, Monday=1, ..., Saturday=6 */
i
=
24
;
day
*=
i
;
i
=
60
;
return
((
day
+
t
->
tm_hour
)
*
i
+
t
->
tm_min
)
*
i
+
t
->
tm_sec
;
register
time_t
day
;
register
time_t
i
;
register
time_t
years
=
t
->
tm_year
-
70
;
if
(
t
->
tm_sec
>
60
)
{
t
->
tm_min
+=
t
->
tm_sec
/
60
;
t
->
tm_sec
%=
60
;
}
if
(
t
->
tm_min
>
60
)
{
t
->
tm_hour
+=
t
->
tm_min
/
60
;
t
->
tm_min
%=
60
;
}
if
(
t
->
tm_hour
>
24
)
{
t
->
tm_mday
+=
t
->
tm_hour
/
24
;
t
->
tm_hour
%=
24
;
}
if
(
t
->
tm_mon
>
12
)
{
t
->
tm_year
+=
t
->
tm_mon
/
12
;
t
->
tm_mon
%=
12
;
}
while
(
t
->
tm_mday
>
__spm
[
1
+
t
->
tm_mon
])
{
if
(
t
->
tm_mon
==
1
&&
__isleap
(
t
->
tm_year
+
1900
))
{
--
t
->
tm_mday
;
}
t
->
tm_mday
-=
__spm
[
t
->
tm_mon
];
++
t
->
tm_mon
;
if
(
t
->
tm_mon
>
11
)
{
t
->
tm_mon
=
0
;
++
t
->
tm_year
;
}
}
if
(
t
->
tm_year
<
70
)
return
(
time_t
)
-
1
;
/* Days since 1970 is 365 * number of years + number of leap years since 1970 */
day
=
years
*
365
+
(
years
+
1
)
/
4
;
/* After 2100 we have to substract 3 leap years for every 400 years
This is not intuitive. Most mktime implementations do not support
dates after 2059, anyway, so we might leave this out for it's
bloat. */
if
(
years
>=
131
)
{
years
-=
131
;
years
/=
100
;
day
-=
(
years
>>
2
)
*
3
+
1
;
if
((
years
&=
3
)
==
3
)
years
--
;
day
-=
years
;
}
day
+=
t
->
tm_yday
=
__spm
[
t
->
tm_mon
]
+
t
->
tm_mday
-
1
+
(
__isleap
(
t
->
tm_year
+
1900
)
&
(
t
->
tm_mon
>
1
));
/* day is now the number of days since 'Jan 1 1970' */
i
=
7
;
t
->
tm_wday
=
(
day
+
4
)
%
i
;
/* Sunday=0, Monday=1, ..., Saturday=6 */
i
=
24
;
day
*=
i
;
i
=
60
;
return
((
day
+
t
->
tm_hour
)
*
i
+
t
->
tm_min
)
*
i
+
t
->
tm_sec
;
}
static
void
num2str
(
char
*
c
,
int
i
)
{
c
[
0
]
=
i
/
10
+
'0'
;
c
[
1
]
=
i
%
10
+
'0'
;
c
[
0
]
=
i
/
10
+
'0'
;
c
[
1
]
=
i
%
10
+
'0'
;
}
char
*
asctime_r
(
const
struct
tm
*
t
,
char
*
buf
)
{
/* "Wed Jun 30 21:49:08 1993\n" */
*
(
int
*
)
buf
=
*
(
int
*
)
(
days
+
(
t
->
tm_wday
<<
2
));
*
(
int
*
)
(
buf
+
4
)
=
*
(
int
*
)
(
months
+
(
t
->
tm_mon
<<
2
));
num2str
(
buf
+
8
,
t
->
tm_mday
);
if
(
buf
[
8
]
==
'0'
)
buf
[
8
]
=
' '
;
buf
[
10
]
=
' '
;
num2str
(
buf
+
11
,
t
->
tm_hour
);
buf
[
13
]
=
':'
;
num2str
(
buf
+
14
,
t
->
tm_min
);
buf
[
16
]
=
':'
;
num2str
(
buf
+
17
,
t
->
tm_sec
);
buf
[
19
]
=
' '
;
num2str
(
buf
+
20
,
(
t
->
tm_year
+
1900
)
/
100
);
num2str
(
buf
+
22
,
(
t
->
tm_year
+
1900
)
%
100
);
buf
[
24
]
=
'\n'
;
return
buf
;
/* "Wed Jun 30 21:49:08 1993\n" */
*
(
int
*
)
buf
=
*
(
int
*
)
(
days
+
(
t
->
tm_wday
<<
2
));
*
(
int
*
)
(
buf
+
4
)
=
*
(
int
*
)
(
months
+
(
t
->
tm_mon
<<
2
));
num2str
(
buf
+
8
,
t
->
tm_mday
);
if
(
buf
[
8
]
==
'0'
)
buf
[
8
]
=
' '
;
buf
[
10
]
=
' '
;
num2str
(
buf
+
11
,
t
->
tm_hour
);
buf
[
13
]
=
':'
;
num2str
(
buf
+
14
,
t
->
tm_min
);
buf
[
16
]
=
':'
;
num2str
(
buf
+
17
,
t
->
tm_sec
);
buf
[
19
]
=
' '
;
num2str
(
buf
+
20
,
(
t
->
tm_year
+
1900
)
/
100
);
num2str
(
buf
+
22
,
(
t
->
tm_year
+
1900
)
%
100
);
buf
[
24
]
=
'\n'
;
return
buf
;
}
char
*
asctime
(
const
struct
tm
*
timeptr
)
{
static
char
buf
[
25
];
return
asctime_r
(
timeptr
,
buf
);
static
char
buf
[
25
];
return
asctime_r
(
timeptr
,
buf
);
}
char
*
ctime
(
const
time_t
*
timep
)
{
return
asctime
(
localtime
(
timep
));
return
asctime
(
localtime
(
timep
));
}
#ifdef RT_USING_DEVICE
int
gettimeofday
(
struct
timeval
*
tp
,
void
*
ignore
)
{
time_t
time
;
rt_device_t
device
;
time_t
time
;
rt_device_t
device
;
device
=
rt_device_find
(
"rtc"
);
device
=
rt_device_find
(
"rtc"
);
RT_ASSERT
(
device
!=
RT_NULL
);
rt_device_control
(
device
,
RT_DEVICE_CTRL_RTC_GET_TIME
,
&
time
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录