gpt4 book ai didi

.Net DateTime 到 DOS 日期 32 位转换

转载 作者:行者123 更新时间:2023-12-05 00:33:32 25 4
gpt4 key购买 nike

我需要从 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 , 秒数需要除以二才存储到 time多变的。 (seconds << 1)左移,乘以 seconds由两个。将其更改为右移 ( (seconds >> 1) ) 以除以 2。

请注意,无法避免在 ToDOSDate 中丢失一秒钟当 dateTime 中的秒数为奇数时.右移除法 seconds by two 将始终删除最低有效位。

关于.Net DateTime 到 DOS 日期 32 位转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11895382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com