2012-08-03 19 views
9

मुझे यकीन नहीं है कि मुझे कुछ याद आ रहा है - या IE या Json.Net।इंटरनेट एक्सप्लोरर, जेसन.Net जावास्क्रिप्ट दिनांक और मिलीसेकंड

लेकिन मूल रूप से यह काम करता है:

new Date("2012-08-03T12:36:54.743Z")

यह 'अमान्य दिनांक' त्रुटि के साथ विफल:

new Date("2012-08-03T12:36:54.74Z")

दूसरी तारीख के रूप में एसक्यूएल सर्वर में संग्रहित है:

2012-08-03 12:36:54.740

यह तो Json.Net का उपयोग कर JSON के रूप में धारावाहिक रूप है - Json.Net 2012-08-03T12:36:54.74Z के रूप में की तारीख धारावाहिक था, प्रभावी रूप से पिछले 0.

मेरा प्रश्न (रों) बंद काटना:

  • यह एक इरादा है आईई में व्यवहार - कि यह मिलीसेकंड में काम करने के लिए सभी 3 अंकों की आवश्यकता है?
  • क्या यह जेसननेट में एक इच्छित व्यवहार है - यह हमेशा एक तारीख में अंतिम 0 को काट देगा?

उत्तर

11

मैं आपको यह नहीं बता सकता कि यह इरादा है या नहीं, लेकिन मैंने बहुत सी खोज की है और मुझे इस मुद्दे के लिए कोई वास्तविक समाधान नहीं मिला है। ऐसा लगता है कि हमें इस तथ्य को स्वीकार करना होगा कि आईई केवल तीन अंकों को स्वीकार करता है। एक ही रास्ता (मेरे लिए) इस समस्या के समाधान पाने के लिए जब serializing Json.NET के लिए एक कस्टम कनवर्टर का उपयोग करने के लिए है:

string json = JsonConvert.SerializeObject(
    whatEver, 
    new IsoDateTimeConverter 
     { 
      DateTimeFormat = "yyyy-MM-dd\\THH:mm:ss.fffK" 
     } 
    ); 

(केवल Json.NET 4.0.8 और 4.5.8 के साथ परीक्षण)

यह जेसन.NET को बिल्कुल 3 दशमलव स्थानों का उपयोग करने के लिए मजबूर करता है।

जहां तक ​​मैं कह सकता हूं, जेसन.NET "12 "मूल्यों को आईएसओ प्रारूप में क्रमशः" आवश्यक "मान के दशमलव स्थानों में पिछली ज़ीरो को छोड़कर अधिकतम आवश्यक सटीकता के साथ क्रमबद्ध करता है।

यह

someDateTimeValue.ToString("yyyy-MM-dd\\THH:mm:ss.FFFFFFFK") 
  • एक सामान्य DateTimeDateTime.UtcNow तरह अप करने के लिए 7 अंक के साथ धारावाहिक हो जाएगा के उत्पादन से मेल खाता है, क्योंकि वह एक DateTime (Ticks में मापा जाता है) की शुद्धता है।
  • यदि DateTime के "दूसरे" भाग में कम दशमलव स्थान हैं, तो Json.NET उन पिछली ज़ीरो को छोड़ देता है।
  • DateTime.Today जैसे दिनांक मूल्य में कोई "दूसरे" मान के पीछे अंक होगा क्योंकि यह वास्तव में 0 है।

See also this description of custom date and time format strings.

+0

में। क्या आप एक बार JSON.Net को कॉन्फ़िगर करने के तरीके के बारे में जानते हैं ताकि यह पूरे ऐप में किया जा सके? – Julius

+8

आप 'isoDateTimeConverter' को अपने' GlobalConfiguration' में डिफ़ॉल्ट रूप से निर्दिष्ट कर सकते हैं। अपना 'Global.asax.cs' खोलें, और इस तरह कुछ जोड़ें:' GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add (नया IsoDateTimeConverter {DateTimeFormat = "yyyy-MM-dd \\ THH: mm: ss। एफएफके "});' – fero

+0

उत्कृष्ट, बस जो मैं खोज रहा था :) – Julius

संबंधित मुद्दे