C# 用C表示1900年纪元的更简单方法#

C# 用C表示1900年纪元的更简单方法#,c#,datetime,C#,Datetime,有没有更简单的计算方法?也许是通过.NET内置的方法 var time = DateTime.Now.AddSeconds(8); var year = 10000000000000 * (ulong)(time.Year - 1900); var month = 100000000000 * (ulong)(time.Month - 1); var dayofyear = 100000000 * (ulong)(time.DayO

有没有更简单的计算方法?也许是通过.NET内置的方法

        var time = DateTime.Now.AddSeconds(8);
        var year = 10000000000000 * (ulong)(time.Year - 1900);
        var month = 100000000000 * (ulong)(time.Month - 1);
        var dayofyear = 100000000 * (ulong)(time.DayOfYear - 1);
        var day = (ulong)(time.Day * 1000000);
        var Hour = (ulong)(time.Hour * 10000);
        var Minute = (ulong)(time.Minute * 100);
        var Second = (ulong)(time.Second);
        var utcTime = year + month + dayofyear + day + Hour + Minute + Second;
它可能是DateTime.Now.AddSeconds(8.allmillizes)吗

我试过这些方法

            var test = (time - DateTime.MinValue).Milliseconds;

        var tes2t = (time - DateTime.MinValue).TotalMilliseconds;

DateTime.MinValue
不是1900。文件说明:

该常数的值相当于公历中的00:00:00.0000000 UTC,0001年1月1日

这比你想要的日期早了1899年。您要执行以下操作:

double milliseconds = ( time - new DateTime( 1900, 1, 1 ) ).TotalMilliseconds
编辑:正如Rick在评论中所建议的,以下内容可能更适合您的需要:

var epoch = new DateTime( 1900, 1, 1, 0, 0, 0, DateTimeKind.Utc );
double milliseconds = ( time - epoch ).TotalMilliseconds;

您只需减去两个
DateTime
实例即可获得
TimeSpan
,然后从中获得毫秒。对不起,不确定您是否注意到我的编辑-我已经尝试过了。数值不同。我不确定你所说的
1900 epoch
是什么意思。通常是从某个参考日期(1900年1月1日)算起的秒数(或毫秒),但我不确定你在做什么。你为什么把分钟乘以100?例如?@Asterisk那么你为什么不解释一下你想做什么而不是
有没有更简单的方法来计算这个呢?
还有你为什么要加
(这是一个月的一天)和
DayOfYear
?请参阅我之前对OP的评论,其中我还使用了一个简单的构造函数,但也指定了
DateTimeKind
@RickDavin很好,我已经更新了答案。