【问题标题】:Need Help to Converting Delphi Time to .Net Time需要帮助将 Delphi 时间转换为 .Net 时间
【发布时间】:2009-05-02 15:42:25
【问题描述】:

我正在将 Delphi 应用程序移植到 C#,但遇到了问题。 Delphi 应用程序将时间记录到日志文件中,然后将其读回程序中。但它记录的时间格式让我感到困惑。我找不到 .Net 库来正确转换它。

Delphi 在日志文件中记录的时间:976129709 (这在 Delphi 代码中被转换为 1/14/2009 5:53:26 PM)

//Here is the Delphi code which records it: 
IntToStr(DirInfo.Time);

//Here is the Delphi code which reads it back in:
DateTimeToStr(FileDateToDateTime(StrToInt(stringTime));

有人知道如何在 .Net 中阅读此内容吗?

【问题讨论】:

  • 为什么这被否决了。有没有我没有看到的简单解决方案?

标签: c# .net delphi datetime


【解决方案1】:

Delphi 的 TSearchRec.Time 格式是旧的 DOS 32 位日期/时间值。据我所知,它没有内置转换器,因此您必须编写一个。例如:

public static DateTime DosDateToDateTime(int DosDate)
{
     Int16 Hi = (Int16)((DosDate & 0xFFFF0000) >> 16);
     Int16 Lo = (Int16)(DosDate & 0x0000FFFF);

     return new DateTime(((Hi & 0x3F00) >> 9) + 1980, (Hi & 0xE0) >> 5, Hi & 0x1F,
        (Lo & 0xF800) >> 11, (Lo & 0x7E0) >> 5, (Lo & 0x1F) * 2);
}

【讨论】:

  • 谢谢。有机会我会试试的。听起来这可能是解决方案。
  • 我在控制台应用中做了一个快速测试,这似乎是正确的答案。
  • dos文件时间的格式在msdn.microsoft.com/en-us/library/ms724274(VS.85).aspx有描述
  • 嗨。我发现这非常有用。您将如何将 System.DateTime 转换为 32 位 DosDate?谢谢!
  • @Matt,您必须遵循 VolkerK 提供的规范并将 DateTime 打包为 32 位整数。
【解决方案2】:

Here is description of different date/time formats(Delphi 的原生 TDateTime 是 OLE 自动化日期格式)。 据此,您需要System.DateTime.FromFileTime()System.DateTime.ToFileTime() + DosDateTimeToFileTime()FileTimeToDosDateTime() 函数。 实际上,这是两步转换。

【讨论】:

    【解决方案3】:

    我尝试了谷歌搜索和实验,从虚拟代码开始寻找类似于 unix 时代的东西。

      var x = 976129709;
      var target = new DateTime(2009, 1, 14, 17, 53, 26);
      var testTicks = target.AddTicks(-x);     // 2009-01-14 17:51:48
      var testMs = target.AddMilliseconds(-x); // 2009-01-03 10:44:36
      var testS = target.AddSeconds(-x);       // 1978-02-08 22:44:57
      // No need to check for bigger time units
      // since your input indicates second precision.
    

    您能否验证您的输入是否正确?

    为了飞行意大利面怪物的爱,放弃你的 12 小时时间格式! ;)

    【讨论】:

    • 感谢您的帮助。会做。但是,我仍然需要追溯工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2023-03-23
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多