C#-从Int值获取日期

时间:2019-05-01 12:13:04

标签: c# datetime jwt-auth

美好的一天,

我正在尝试检查令牌的到期日期是否已经到期。我正在使用JWT生成令牌。通过使用此代码,我可以在我的JavaScript环境中检查我的令牌是否仍然有效。

if (decodedToken.exp < new Date().getTime() / 1000) {
    alert("Session expired);
}

// decodedToken.exp returns a value like "1556797243"

但是我的问题是,如果令牌已经过期,我不知道如何使用C#代码进行验证。

我尝试过类似的事情

// suppose I have a value of "1556797243"
var expirationDate = DateTime.ParseExact(expiration, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

但这不起作用。

2 个答案:

答案 0 :(得分:5)

.NET具有解析Unix时间戳的内置方法,但是它位于DateTimeOffset而不是您可能期望的DateTime上:

var expirationTime = DateTimeOffset.FromUnixTimeSeconds(expiration).DateTime;

如果到期是一个字符串,则需要将其解析为长整型:

var expirationTime = DateTimeOffset.FromUnixTimeSeconds(long.Parse(expiration)).DateTime;

答案 1 :(得分:2)

您可以使用此功能将unixTime转换为DateTime

public static class DateUtil
    {
    private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

    public static DateTime FromUnixTime(long unixTime)
    {
        return Epoch.AddMilliseconds(unixTime).ToLocalTime();
    }
}
var expirationDate  = DateUtil.FromUnixTime(yourtime);