[英]what is the valid C# way to convert between DateTime and unix timestamp
[英]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.