关于部分UNIX系统时间的问题

in #cn7 years ago

最近被测试部门给提了一个很不是bug的bug,因为这个完全是因为设备的嵌入式操作系统所决定的,但又不得不使用系统提供的时间。也许他们是闲着无聊吧,在我一个时间设置的界面,竟然将当前时间设置到了2050年,结果系统崩了,重启之后时间变成了1970年1月1日。
这个我看了下,应该是unix的时间戳的问题.可以看看这个百度百科。https://baike.baidu.com/item/2038%E5%B9%B4%E9%97%AE%E9%A2%98/10578442
很多的unix(包括类Unix)使用的是POSIX时间,这个时间表示的是从当前时间距离起点时间格林尼治时间1970年1月1日0时0分0秒的秒数。例如今天中午12点,这个值是1502251200。这个值是32位有符号类型,最大值是2的31方减1即2147483647,当时间到达2038年1月19日3时14分08秒时,这个值会溢出而变成负数,造成系统出问题。现在我们生活中很多的电子产品都是采用的嵌入式操作系统,大多数 也应该会有这个2038年的问题,大家使用可要小心,不要随便将时间设置到2038以后的时间。
最后给大家来个题目,看看下面这段程序主要实现的什么功能
long data=2356876906;
int count=0;
while(data)
{
count++;
data&=data-1;
}
如果知道了其功能,用计算器也能算出count的值.
timg.jpg

Sort:  

Congratulations @syh7758520! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of posts published

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!