加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.Net DateTime到DOS日期32位转换

发布时间:2020-12-14 04:37:07 所属栏目:Windows 来源:网络整理
导读:我需要从32位Dos日期转换为.NET System.DateTime并再次返回.我正在使用下面的两个例程,但是当我来回转换它们时,它们会在几秒钟内完成.谁能明白为什么? public static DateTime ToDateTime(this int dosDateTime){ var date = (dosDateTime 0xFFFF0000) 16;
我需要从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;
}

解决方法

在ToDOSDate中,在存储在时间变量中之前,需要将秒数除以2. (秒<<< 1)左移,将秒乘以2.将其改为右移位((秒>> 1))除以2. 请注意,当dateTime中存在奇数秒时,无法避免在ToDOSDate中丢失秒.将秒数除以2的正确位移将始终降低最低有效位.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读