DateTime equivalent in C

DateTime equivalent in C

本文关键字:in equivalent DateTime      更新时间:2023-10-16

我试图在不引入大量C++.Net类的情况下,将.Net代码片段改编为优秀的旧C。它看起来像这样:

  Int64 ticks = DateTime.Now.ToBinary();
  WriteSigned64(address, ticks);

在为Win32进程编译的C/C++中,是否存在等效程序?我发现的唯一的东西是使用替代的和有点有限的32位结构。我还必须写这个字段才能与.Net版本兼容。

您可以使用在time.h中声明的函数time_t time(time_t *t);。它为您提供从大纪元开始的秒数(1970-01-01 00:00:00+0000(UTC))。

在所有合理更新的版本中,time_t是64位整数。

它是一个C函数,但它可以从C++程序中调用。

没有任何直接的方法可以完成您的要求,并且仍然让它执行与您提供的代码完全相同的操作。

DateTime.ToBinary()不仅仅是滴答声。它将DateTime对象的TicksKind属性编码为单个二进制值。请参阅MSDN上的文档。您可能还希望参考.NET参考源。

为了进行说明,请考虑以下C#代码:

DateTime dt = DateTime.Now;
Console.WriteLine(dt.Kind);
Console.WriteLine(dt.Ticks);
Console.WriteLine(dt.ToBinary());

样本输出:

Local
635476072989775339
-8587895711865000469

您还应该认识到,DateTime.Now返回Local类型,这意味着记号基于代码运行的计算机的本地时区。如果您从一个系统中提取记号(或二进制),并在具有不同时区的系统上重新创建DateTime,您将获得与最初编码的值不同的值。

相比之下,time_t和C/C++中大多数其他与时间相关的类型都是基于UTC的,因此该值没有歧义。