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

时间:2017-11-23 11:15:03

标签: c# hex

我正在使用c#。我正在尝试将类型为system.datetime的变量date1转换为十六进制值。根据在线转换器,它的值应 0000015908178fd8 。我在网上冲浪,发现我可以使用ticks函数将datetime转换为hex。但是我得到的输出 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
    }

2 个答案:

答案 0 :(得分:2)

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

AND TO_CHAR(kp.tmstmp) LIKE '%.09.%' 
OR TO_CHAR(kp.tmstmp) LIKE '%.10.%' 

结果:

DateTime date1 = new DateTime(2016, 12, 16, 16, 44, 39);

string result = 
  ((long)(date1 - new DateTime(1970, 1, 1)).TotalMilliseconds).ToString("x");

Console.WriteLine(result);

答案 1 :(得分:1)

您的转换器将日期时间表示为"自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将被假定为您当地时区的时间。