2016-03-15 87 views
1

我在c#中休息ws。 有了這個ws,我可以把毫秒的日期時間。這是我的要求的一個例子:如何設置精度毫秒在C#

{ "sensorId": 656, 
"value": "128", 
"timestamp": "2016-06-01 11:20:50.125", 
"values": 
    [{"value":"2064","timestamp":"2016-06-09 13:23:50.100"}] 
} 

正如你可以看到有兩個日期與毫秒。第一次約會,以.125毫秒結束。

在我的代碼中,我使用此代碼反序列化字段日期。

public class SensorDateTimeConverter : DateTimeConverterBase//IsoDateTimeConverter 
    { 
     private const string Format = "yyyy-MM-dd HH:mm:ss.fff"; 

     public override void WriteJson(JsonWriter writer, 
             object value, 
             JsonSerializer serializer) 
     { 
      writer.WriteValue(((DateTime)value).ToString(Format)); 
      writer.Flush(); 
     } 

     public override object ReadJson(JsonReader reader, 
             Type objectType, 
             object existingValue, 
             JsonSerializer serializer) 
     { 
      if (reader.Value == null) 
      { 
       return null; 
      } 

      var s = reader.Value.ToString(); 
      DateTime result; 

      if (DateTime.TryParseExact(s, 
             Format, 
             CultureInfo.InvariantCulture, 
             DateTimeStyles.None, 
             out result)) 
      { 
       return result; 
      } 

      return DateTime.Now; 
     } 
    } 

如果我試圖檢查方法ReadJson的數據是正確的解析和毫秒是「125」。

如果我嘗試保存數據庫的這個值,我會看到相同的日期,但是.127毫秒。

爲什麼?

回答

2

如果我嘗試檢查ReadJson方法的數據是否正確解析,毫秒是「125」。

這告訴你問題不在於JSON轉換。所有發佈的代碼因此與問題無關。你已經成功地平分了問題所在,但是你調查了錯誤的分區。

SQL Server的datetime數據類型的精度有限。使用datetime2

+0

是在JSon轉換後的日期是正確的。我用日期時間使用SQL Server – bircastri

1

如果我嘗試保存數據庫的這個值,我會看到相同的日期,但是.127毫秒。

假設你保存到一個SQL數據庫爲datetime這是精度的限制,你可以得到:

datetime值四捨五入爲增量.000,.003,或.007秒,如下表所示。

Source

如果你想更精確,那麼你應該使用不同的列類型:

使用時間,日期,DATETIME2和DATETIMEOFFSET數據類型的新工作。這些類型與SQL標準一致。他們更便攜。 時間,datetime2和datetimeoffset提供更多的秒精度。 datetimeoffset爲全局部署的應用程序提供時區支持。

(來自同一頁,增加了重點)。

datetime2 page有關於此結構及其侷限性的更多信息。