Mat*_*att 4 .net datetime bit-manipulation dos type-conversion
我需要从32位Dos日期转换为.NET System.DateTime并再次返回.我正在使用下面的两个例程,但是当我来回转换它们时,它们会在几秒钟内完成.谁能明白为什么?
public static DateTime ToDateTime(this int dosDateTime)
{
var date = (dosDateTime & 0xFFFF0000) >> 16;
var time = (dosDateTime & 0x0000FFFF);
var year = (date >> 9) + 1980;
var month = (date & 0x01e0) >> 5;
var day = date & 0x1F;
var hour = time >> 11;
var minute = (time & 0x07e0) >> 5;
var second = (time & 0x1F) * 2;
return new DateTime((int)year, (int)month, (int)day, (int)hour, (int)minute, (int)second);
}
public static int ToDOSDate(this DateTime dateTime)
{
var years = dateTime.Year - 1980;
var months = dateTime.Month;
var days = dateTime.Day;
var hours = dateTime.Hour;
var minutes = dateTime.Minute;
var seconds = dateTime.Second;
var date = (years << 9) | (months << 5) | days;
var time = (hours << 11) | (minutes << 5) | (seconds << 1);
return (date << 16) | time;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
在ToDOSDate,存储在time变量中之前,需要将秒数除以2 . (seconds << 1)左移,乘以seconds2.将其更改为右移位((seconds >> 1))除以2.
请注意,ToDOSDate当有奇数秒时,没有办法避免输入秒dateTime.正确的位移除以seconds2将始终降低最低有效位.
| 归档时间: |
|
| 查看次数: |
1279 次 |
| 最近记录: |