能力值:
( LV2,RANK:10 )
|
-
-
2 楼
你的这个日期是DOS时间的一个变种,从2000开始计算时间,DOS时间本来是1980开始计算的。 int todos(int y, int m, int d) {
y -= 2000;
return y << 9 | m << 5 | d;
}
printf('%x', todos(2017, 5, 17)); 22 b1 我把代码改了以下,从2000开始,这样得到的结果就是正确的。 下面是PHP的实现 /**
* Unix timestamp to DOS datetime(4 bytes)
* https://msdn.microsoft.com/en-us/library/ms724247.aspx
*
* @param integer $timestamp Unix timestamp
* @return integer DOS datetime for 4 bytes
*/
function timestamp2dos($timestamp)
{
$bit = empty($timestamp) ? getdate() : getdate($timestamp);
if ($bit['year'] < 2000)
return (1 << 21 | 1 << 16);
$bit['year'] -= 2000;
return $bit['year'] << 25 |
$bit['mon'] << 21 |
$bit['mday'] << 16 |
$bit['hours'] << 11 |
$bit['minutes'] << 5 |
$bit['seconds'] >> 1;
}
echo dechex(timestamp2dos(mktime(0, 0, 0, 5, 17, 2017)))
//22 b1 00 00 上面的例子是传入的unix timestamp,但是最终还是用 year、mon、day之类的计算的,照葫芦画瓢即可:https://msdn.microsoft.com/en-us/library/ms724247.aspx
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
geoh
你的这个日期是DOS时间的一个变种,从2000开始计算时间,DOS时间本来是1980开始计算的。int todos(int y, int& ...
十分感谢!
|
|
|