在 ASP.NET 中将 UNIX 时间戳转换为日期时间的最简单方法



我有以下模型代码:

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; }
}

我通过 WebAPI 控制器、POST 方法接收此消息。

这是 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成为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; }
}

最新更新