簡體   English   中英

在 ASP.NET 中將 UNIX 時間戳轉換為 DateTime 的最簡單方法

[英]Simplest way to convert UNIX Timestamp to DateTime in ASP.NET

我有以下模型代碼:

public class Sensor
{
    public long Id { get; set; }
    [Required]
    public string Tag { get; set; }
    public DateTime Timestamp { get; set; }
    public string Status { get; set; }
    public int Valor { get; set; }
}

我通過 POST 方法通過 WebAPI 控制器接收到此信息。

這是 POST 方法的簽名:

public async Task<ActionResult<Sensor>> PostSensor(Sensor sensor)

它接收這樣的值:

{
    "tag": "mytag",
    "Timestamp": "1575179924",
    "valor": "3000"
}

我的問題是,由於控制器的簽名,它嘗試驗證時間戳,但由於 UNIX 時間戳不是日期時間而失敗。

我想在這個方法中轉換它,但這需要禁用整個控制器的驗證。

我嘗試創建一個 JSON 轉換器,但它總是無法轉換。

public class UnixEpochTimeToDateTimeConverter: Newtonsoft.Json.JsonConverter
{
    public override bool CanWrite => false;

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
        JsonSerializer serializer)
    {
        if (!reader.Path.ToLower().Contains("time")) return null;
        var parsed = long.TryParse(reader.Value.ToString(), out var unixTimeStamp);
        if(!parsed){ return null; }
        var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
        var timeSpan = TimeSpan.FromSeconds(unixTimeStamp);
        var localDateTime = epoch.Add(timeSpan).ToLocalTime();

        return localDateTime;
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(DateTime);
    }
}

(我收到此錯誤:無法將 JSON 值轉換為 System.DateTime。路徑:$.Timestamp

有解決方案嗎? 也許另一種轉換方法? (我真的不知道我是否做錯了什么)

不要與格式作斗爭,只需讓Timestamp成為long . 您沒有理由不能通過調用Sensor對象上的屬性將時間戳轉換為您需要的任何格式。

public class Sensor
{
    public long Id { get; set; }

    [Required]
    public string Tag { get; set; }

    public long Timestamp { get; set; }

    public DateTime TimestampDt
    { 
        get
        {
            return DateTimeOffset.FromUnixTimeSeconds(Timestamp).UtcDateTime;
        }
    }

    public string Status { get; set; }

    public int Valor { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM