FileTime到字符串

时间:2018-08-27 13:57:08

标签: java c# windows filetime

我正在读取一些存储为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,都给出了相同的(错误的)结果。

任何建议将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:4)

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

var date = DateTime.FromFileTimeUtc(131733712713359180);

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