我正在使用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
}
答案 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
将被假定为您当地时区的时间。