यह तो मैं उम्मीद मुश्किल साबित हुई:
यहाँ एक StackOverflow पोस्ट है कि ऐसा करने के लिए कोड प्रदान करता है
public class TicksSinceFormat extends DateFormat {
@Override
public StringBuffer format(Date date, StringBuffer buffer, FieldPosition field) {
long millis = date.getTime();
return new StringBuffer("/Date(" + millis + ")/");
}
@Override
public Date parse(String string, ParsePosition position) {
int start = string.indexOf("(") + 1;
int end = string.indexOf(")");
String ms = string.substring(start, end);
Date date = new Date(Long.parseLong(ms));
position.setIndex(string.length() - 1); // MUST SET THIS
return date;
}
@Override
public Object clone() {
return new TicksSinceFormat(); // MUST SET THIS
}
}
का उपयोग वर्ग तो अत्यंत सरल है, बस कार्य करें:
ObjectMapper om = new ObjectMapper();
om.setDateFormat(new TicksSinceFormat())
मुझे लगता है कि इसे बेहतर कोड किया जा सकता है + जब .NET Ticks VS Java ticks की बात आती है तो मुझे मतभेदों से निपटने की आवश्यकता होगी - लेकिन अब यह होगा ओ। अगर किसी के पास बेहतर समाधान या उल्लिखित समस्याओं में अधिक अंतर्दृष्टि है तो मैं बाद में सौदा करूँगा - पोस्ट करने के लिए स्वतंत्र महसूस करें और यदि यह बेहतर है तो मैं आपके उत्तर को सही के रूप में चिह्नित कर दूंगा।
संपादित करें: जैसा कि मैंने इस question & answer में समझाया है, मैंने सेवास्टैक पर स्विच किया है। सर्वर पर आगे लाइब्रेरी और यह अलग-अलग, ISO8601 प्रारूप देता है। उस प्रारूप के लिए मैं थोड़ा अलग पार्सिंग का उपयोग कर रहा हूं (क्योंकि जैक्सन को ISO8601 को पार्स करने में परेशानी है जिसमें मिलीसेकंड शामिल हैं)। बेशक, अन्य कोड के साथ के रूप में मैं पोस्ट कर रहा हूँ - मुझे पता है कि तुम बेहतर संस्करण पूछना चाहते हैं तो (सिर्फ पोस्ट करें कोड/इस पोस्ट को संपादित, बल्कि यह कैसे किया जाना चाहिए पर दार्शनिक बयानबाजी का सहारा से):
@SuppressLint("SimpleDateFormat")
public class JacksonSimpleDateFormat extends SimpleDateFormat {
public JacksonSimpleDateFormat() {
if (mParser == null) {
mParser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
mParser.setTimeZone(TimeZone.getTimeZone("UTC"));
}
}
@Override
public StringBuffer format(Date date, StringBuffer buffer, FieldPosition field) {
return mParser.format(date, buffer, field);
}
private static SimpleDateFormat mParser;
@Override
public Date parse(String string, ParsePosition position) {
String str = string.split("\\.")[0];
Date date = null;
try {
date = mParser.parse(str);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
position.setIndex(string.length() - 1);
return date;
}
@Override
public Object clone() {
return new JacksonSimpleDateFormat();
}
}
ऐसा लगता है कि आपके कोड को ठीक काम करना चाहिए ... केवल एक ही परिवर्तन जो मैं करूँगा वह आपके 'पार्स' विधि में एक RegEx कैप्चर समूह का उपयोग कर रहा है , string.indexOf/string.substring के बजाय। यह सिर्फ एक स्टाइल चीज है ... मैंने हमेशा स्ट्रिंग.इंडेक्स/सबस्ट्रिंग को कुछ हद तक भंगुर और सूचकांक/लंबाई के संबंध में काम करने के लिए मुश्किल पाया है। बस मेरी विनम्र राय। –
@ फिलिपटेन केयर मुझे एक मजबूत रेगेक्स और कोड प्रदान करने के लिए जो निश्चित रूप से काम करेगा? – kape123