【问题标题】:FileTime to string文件时间到字符串
【发布时间】:2019-02-02 02:11:27
【问题描述】:

我正在读取一些存储为 long 的 Microsoft FileTime 值,并尝试将其转换为人类可读的日期。

例如,值131733712713359180 转换为:Wednesday, June 13, 2018 1:47:51pm。这是使用在线工具完成的,这里:Online time convertor

我已经让它在 Java 中运行良好,但是当我尝试在 C# 中进行时,我得到了错误的年份。我得到的输出是:13/06/0418 13:47:51

我用来进行转换的代码是:

public string CalculateTimestamp(Int64 epoch)
{
    DateTime date = DateTime.Now;

    try
    {
        date = new DateTime(epoch);
        DateTime filetime = new DateTime(date.ToFileTime());
        result = filetime.ToString();
    }
    catch (Exception uhoh)
    {
        result = "failedtoparsetimestamp";
    }

    return result;
}

在 Java 中进行转换时,这是我正在使用的代码。

public String calculateTimeStamp(long epoch) {

    if (epoch == 0) {
        return "--";
    }

    long unixDifference = 11644473600000L;

    long timeStamp = (epoch / (10 * 1000)) - unixDifference;

    Date date = new Date(timeStamp);

    return date.toString();
}

我猜想 C# 转换应该更直接,但我无法弄清楚为什么年份是错误的。我试过UInt64Int64,都给出了相同(错误)的结果。

任何建议将不胜感激。

谢谢

【问题讨论】:

  • 只做var date = DateTime.FromFileTimeUtc(131733712713359180);,返回2018-06-13 13:47:51
  • @MatthewWatson 你应该回答这个问题......
  • 您的 Java 代码正在使用可怕的旧日期时间类,这些类在几年前已被 java.time 类取代。对于 .Net 平台,使用类似于 java.time 的库,称为 NodaTime,基于 java.time 的前身称为 Joda-Time 从 Java 移植到 C#。
  • 是的,该代码已经存在多年了,直到昨天我才看到它。我会更新的,谢谢。

标签: java c# windows filetime


【解决方案1】:

这是DateTime 内置的,因此无需进行任何调整:

var date = DateTime.FromFileTimeUtc(131733712713359180);

这会返回2018-06-13 13:47:51

【讨论】:

  • 是的,明白了!我不敢相信我没有看到,我盯着它看了十多分钟。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 2021-08-04
  • 1970-01-01
相关资源
最近更新 更多