C# 将datetime类型转换为十六进制值会打印错误的答案

C# 将datetime类型转换为十六进制值会打印错误的答案,c#,hex,C#,Hex,我和c#一起工作。我正在尝试将类型为system.datetime的变量date1转换为十六进制值。根据在线转换器,其值应为0000015908178fd8。我在网上冲浪,发现我可以使用ticks函数将datetime转换为十六进制。然而,我得到了这个输出8D425D2D3A13580。我想我的逻辑有缺陷,或者是某种误解。我做错了什么 public static void Main(string[] args) { DateTime date1 = new DateTime

我和c#一起工作。我正在尝试将类型为system.datetime的变量date1转换为十六进制值。根据在线转换器,其值应为0000015908178fd8。我在网上冲浪,发现我可以使用ticks函数将datetime转换为十六进制。然而,我得到了这个输出8D425D2D3A13580。我想我的逻辑有缺陷,或者是某种误解。我做错了什么

public static void Main(string[] args)
    {
       DateTime date1 = new DateTime(2016, 12, 16, 16, 44, 39);
       Console.WriteLine(date1.ToString()); // output 16.12.2016 16:44:39

       Console.WriteLine(date1.Ticks.ToString("X2")); // output 8D425D2D3A13580
    }
您正在使用(但计算毫秒,而不是秒):

结果:

15908856cd8
您正在使用(但计算毫秒,而不是秒):

结果:

15908856cd8

您的转换器将日期时间表示为“自1970年1月1日以来经过的毫秒”,就像javascript中表示的时间一样。因此,要在C#中获得相同的结果,您必须执行以下操作:

var date1 = new System.DateTime(2016, 12, 16, 16, 44, 39);
var timestamp = (long) (date1.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
Console.WriteLine(timestamp.ToString("X2"));
// outputs 1590772C458

请注意,输出取决于您当前的时区,因为在这种情况下,
date1
将假定为本地时区中的时间

转换器将日期时间表示为“自1970年1月1日以来经过的毫秒”,就像javascript中表示的时间一样。因此,要在C#中获得相同的结果,您必须执行以下操作:

var date1 = new System.DateTime(2016, 12, 16, 16, 44, 39);
var timestamp = (long) (date1.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
Console.WriteLine(timestamp.ToString("X2"));
// outputs 1590772C458

请注意,输出取决于您当前的时区,因为在这种情况下,
date1
将假定为本地时区中的时间

您是否尝试过首先对一个知道十六进制值的小值使用转换?另外,不要假设在线转换器是正确的;)在线转换器是否像您一样转换?来自msdn:一个刻度代表一百纳秒或一千万分之一秒。一毫秒内有10000个滴答声,或一秒钟内有1000万个滴答声。此属性的值表示自0001年1月1日午夜12:00:00(公历0001年1月1日0:00:00 UTC)以来经过的100纳秒间隔数。您在联机转换器中转换了什么?datetime的字符串将与您第一次尝试对一个小值(您知道十六进制值)进行转换时使用的tickswave不同?另外,不要假设在线转换器是正确的;)在线转换器是否像您一样转换?来自msdn:一个刻度代表一百纳秒或一千万分之一秒。一毫秒内有10000个滴答声,或一秒钟内有1000万个滴答声。此属性的值表示自0001年1月1日午夜12:00:00(公历0001年1月1日0:00:00 UTC)以来经过的100纳秒间隔数。您在联机转换器中转换了什么?日期时间的字符串将与刻度不同