2011-04-12 7 views
5

में मैं SimpleDateFormat वस्तु का उपयोग कर रहा Date वस्तु के साथ पार्स करने नहीं SimpleDateFormat। समस्या यह है कि Date ऑब्जेक्ट गलत तिथि दिखाता है, जो मूल स्ट्रिंग से कुछ मिनट दूर है। Date ऑब्जेक्ट डिबगर में कुल मिलीसेकंड में समय को संग्रहीत करने के लिए प्रतीत होता है।दिनांक वस्तु टाइमस्टैम्प स्ट्रिंग के रूप में नीचे दिखाया गया है सही ढंग से जावा (Android) पर्यावरण

समस्या पर कोई विचार?

import java.text.SimpleDateFormat; 

import java.util.Date; 

Date played_at_local; 

dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSSSSZ"); 

played_at_local = dateFormat.parse("2011-04-11T22:27:18.491726-05:00"); 

//played_at_local shows "Mon Apr 11 22:35:29 America/Chicago 2011" in debugger 

उत्तर

0

05:00 -->> 0500

और

hh --> HH // error not because of this ,but date is in 24hr format.

played_at_local = dateFormat.parse("2011-04-11T22:27:18.491726-05:00"); 

होना चाहिए

played_at_local = dateFormat.parse("2011-04-11T22:27:18.491726-0500"); 
1

इस प्रयास करें, मेरे लिए काम कर जेड प्रारूप स्ट्रिंग से rmove

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSSSS'Z'"); 

played_at_local = dateFormat.parse("2011-04-11T22:27:18.491726Z-05:00"); 
13

प्रारूप स्ट्रिंग से आंशिक सेकंड निकालने का प्रयास करें तारीख में useed किया जाना चाहिए या। मैं बस एक ही मुद्दे में भाग गया, लेकिन थोड़ा अलग प्रारूप के साथ। मेरा इनपुट प्रारूप आईएसओ प्रारूप में नहीं था (नहीं "टी", और कोई "ज़ेड"), लेकिन लक्षण वही था - समय कुछ यादृच्छिक संख्या और सेकंड से बंद था, लेकिन बाकी सब कुछ ठीक था।

आंशिक दूसरे प्रारूप का उपयोग करते समय:

SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS"); 

# Parsed date: 2011-05-27 17:11:15.271816 => Fri May 27 17:15:46 EDT 2011 
# Parsed date: 2011-05-27 17:09:37.750343 => Fri May 27 17:22:07 EDT 2011 
# Parsed date: 2011-05-27 17:05:55.182921 => Fri May 27 17:08:57 EDT 2011 
# Parsed date: 2011-05-27 16:55:05.69092 => Fri May 27 16:56:14 EDT 2011 
# Parsed date: 2011-05-27 16:38:35.50348 => Fri May 27 16:39:25 EDT 2011 

मैं इसे प्रारूप से आंशिक सेकंड को हटाने के द्वारा तय यह वही मेरी लॉग परिणामों की तरह दिखाई देता है।

SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

# Parsed date: 2011-05-27 17:11:15.271816 => Fri May 27 17:11:15 EDT 2011 
# Parsed date: 2011-05-27 17:09:37.750343 => Fri May 27 17:09:37 EDT 2011 
# Parsed date: 2011-05-27 17:05:55.182921 => Fri May 27 17:05:55 EDT 2011 
# Parsed date: 2011-05-27 16:55:05.69092 => Fri May 27 16:55:05 EDT 2011 
# Parsed date: 2011-05-27 16:38:35.50348 => Fri May 27 16:38:35 EDT 2011 

क्या मुझे लगता है कि क्या हो रहा है कि मेरी "आंशिक सेकंड" इनपुट स्ट्रिंग के भाग बहुत बड़ा है (एक ही ओपी उदाहरण में सच है) है। ऐसा लगता है कि यह केवल तीन दशमलव स्थानों की अपेक्षा करता है। यदि आप गणित (पहला उदाहरण लेने के लिए):

  • आंशिक सेकंड = ०.२७१८१६ सेकंड
  • क्या DateFormat देखता है एक दूसरे
  • 271816/1000 == की 271816/1000 271 सेकंड
  • 271/60 = 4 मिनट
  • 271% से 60 = 31 सेकंड
  • 17:11:15 17:15:46 बिल्कुल 4 मिनट,
बंद 31 सेकंड है 210
+2

माइक्रोसेकंड हाँ, SimpleDateFormat को संभाल नहीं कर सकते हैं। करने के लिए सबसे आसान बात अतिरिक्त 3 अंक बाहर निकालना है, उदा। दिनांक = date.substring (0, दिनांक। लम्बाई() - 4) + "जेड"; –

+0

@scottw: सिवाय इसके कि यह हमेशा काम नहीं करेगा, जैसा कि आप मेरे उदाहरण में देख सकते हैं, अंतिम 2 आइटमों में केवल 5 अंक हैं, बजाय 6; इसलिए कुछ मामलों में, केवल 1 दशमलव स्थान हो सकता है, जो पूरी तरह से गलत होगा! यदि आप केवल 3 दशमलव स्थानों के लिए स्ट्रिंग को छोटा कर देते हैं, तो यह ठीक काम करता है। हमारे मामले में, हमें माइक्रोसेकंड की आवश्यकता नहीं थी (मुझे लगता है कि बहुत से लोग इसके साथ भी सहमत होंगे), इसलिए यह प्रारूप स्ट्रिंग से 'एस' को हटाने से बाहर निकलने योग्य समय प्राप्त करने के लिए पर्याप्त है। यदि आपको आंशिक सेकंड की आवश्यकता है, तो हाँ, आपको कुछ स्ट्रिंग मैनिपुलेशन करना होगा। – Joe

+0

यह एक अच्छा बिंदु है जो - मेरा समाधान केवल काम करता था क्योंकि मैं एक ऐसी सेवा से काम कर रहा था जो हमेशा अंशकालिक सेकंड (शून्य के साथ पैडिंग सहित) के लिए 6 अंक प्रदान करता था, इसलिए मैं स्ट्रिंग मैनिपुलेशन से दूर हो सकता था। –

0

आप इस विधि की कोशिश कर सकते: http://docs.oracle.com/javase/6/docs/api/java/sql/Timestamp.html#valueOf(java.lang.String)

कुंजी बात यह है कि दशमलव अंक वैकल्पिक हैं और आप उनमें से एक चर नंबर का उपयोग कर सकते हैं। हालांकि, यह समय क्षेत्र के लिए जिम्मेदार प्रतीत नहीं होता है।

डॉक्स से

:

valueOf 

public static Timestamp valueOf(String s) 
Converts a String object in JDBC timestamp escape format to a Timestamp value. 
Parameters: 
s - timestamp in format yyyy-mm-dd hh:mm:ss[.f...]. The fractional seconds may be omitted. 
Returns: 
corresponding Timestamp value 
Throws: 
IllegalArgumentException - if the given argument does not have the format yyyy-mm-dd hh:mm:ss[.f...] 
0

इस प्रयास करें:

dTime = new SimpleDateFormat("HH:mm:ss:SS"); 
String sTime = (dTime.format(new java.util.Date())).toString(); 

आशा इस मदद

+0

कृपया और विवरण जोड़ें। –

+0

कृपया कुछ कोड स्पष्टीकरण जोड़ें। – Nilesh

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