2

再会,

我正在尝试检查令牌到期日期是否已过期。我正在使用 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);

但它不起作用。

4

2 回答 2

7

.NET 具有解析 Unix 时间戳的内置方法,但正如您所料,它位于 DateTimeOffset 上,而不是 DateTime 上:

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

如果 expire 是一个字符串,您需要先将其解析为 long :

var expirationTime = DateTimeOffset.FromUnixTimeSeconds(long.Parse(expiration)).DateTime;
于 2019-05-01T12:29:17.300 回答
3

您可以使用此功能从转换unixTimeDateTime

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);
于 2019-05-01T12:16:11.673 回答