2011-01-24 16 views
5

मैं एक SQLite DB जो प्रारूप में बाहर आता है से एक datetime को पुन: प्राप्त कर रहा हूँ करने के लिए एक datetime स्ट्रिंग ...स्वरूप समय केवल

2011-01-24 02:45:00 

सी # में मैं बस DateTime.Parse("2011-01-24 02:45:00").ToString("HH:mm") क्रम में उपयोग कर सकते हैं स्ट्रिंग पाने के लिए 02:45

क्या उनका एक तरीका है मैं इसे एंड्रॉइड/जावा में कर सकता हूं? अपने Android एप्लिकेशन में मेरे कोड इस तरह दिखता है ...

// dateStr below is logging as correctly being yyyy-MM-dd HH:mm:ss format 
String dateStr = cursor.getString(cursor.getColumnIndex("start_time")); 
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
String shortTimeStr = sdf.format(dateStr); // <-- throws IllegalArgumentException 

संपादित करें: दोनों doc_180 और Konstantin Burov के लिए धन्यवाद - उदाहरण मुझे समस्या को हल मदद की है को देखते हुए। इस मुद्दे का एक हिस्सा यह था कि मैं java.sutil.Date के बजाय java.sql.Date आयात कर रहा था। मैंने चीजों को चारों ओर बदल दिया है और यह अब मेरे लिए पूरी तरह से काम कर रहा है।

+0

SimpleDateFormat को एक तिथि बहस की आवश्यकता होती है, स्ट्रिंग नहीं। आपको अपनी तिथि को मिलीसेकंड के रूप में स्टोर करना चाहिए और उस से डेट ऑब्जेक्ट बनाना चाहिए। दिनांक डी = नई तिथि (dateAsMillisec) और फिर इसे सरल से स्वरूपित करने के लिए पास करें। –

+0

@ doc_180: ठीक है क्षमा करें, आप काफी सही हैं - शायद मेरे प्रश्न पर पुनर्विचार करने की आवश्यकता है। मेरी समस्या यह है कि एंड्रॉइड साइड पर मेरा डीबी एक पीसी-आधारित ऐप के SQLite डीबी का 'दर्पण' है जो उस लंबे/रिवर्स डेटाटाइम प्रारूप का उपयोग करता है और मैं प्रारूपों को समान रखना चाहता हूं। मैंने date.parse (स्ट्रिंग) का उपयोग करने की कोशिश की तो sdf.format (...) लेकिन यह भी एक अपवाद फेंक दिया। – Squonk

+0

क्या आपने मेरा कोड आजमाया था। यह काम करता है और मैंने जांच की है। –

उत्तर

11

आपको निम्न कार्य करने की जरूरत है।

try { 
    Date date = null; 
    date = df.parse("2011-01-24 02:45:00"); 
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
    String shortTimeStr = sdf.format(date); 
    System.out.println(shortTimeStr); 
} catch (ParseException e) { 
    // To change body of catch statement use File | Settings | File Templates. 
    e.printStackTrace(); 
} 

जैसा कि मैंने टिप्पणी में उल्लेख किया है, आपको समय को स्ट्रिंग के बजाय मिलीसेकंड के रूप में स्टोर करना चाहिए। अन्यथा, मुझे मध्यस्थ वस्तु दिनांक बनाने से कोई अन्य तरीका नहीं दिखता है।

+0

धन्यवाद, मेरे प्रश्न के अंत में मेरा संपादन देखें। मैं तारीख भंडारण लगता है कि जब तक (मिलीसेकेंड) भविष्य में जाने के लिए लेकिन इस समय, मैं एक पीसी SQLite DB किसी और इसलिए मैं पीसी/एंड्रॉयड के बीच एक ही स्वरूप के साथ चिपके हुए कर रहा हूँ द्वारा बनाई मिरर कर रहा हूँ एक तरीका हो सकता है। – Squonk

+3

यहां डीएफ क्या है ??? – Androiduser

+0

डीएफ स्टैंड क्या है? – Rick

2

SimpleDateFormat.format एक स्ट्रिंग पास करते समय दिनांक या कैलेंडर तर्क के रूप में अपेक्षा करता है। पहले स्ट्रिंग को स्ट्रिंग में कनवर्ट करें।

String dateStr = cursor.getString(cursor.getColumnIndex("start_time")); 
SimpleDateFormat toFullDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
Date fullDate = toFullDate.parse(dateStr); 
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
String shortTimeStr = sdf.format(fullDate); 

और जब तक डेटाबेस में हाँ, मैं नहीं बल्कि संग्रहीत था, जिससे हो रही एक दिनांक वस्तु तो अधिक तुच्छ होगा:

Long dateMilliseconds = cursor.getLong(cursor.getColumnIndex("start_time")); 
Date fullDate = new Date(dateMilliseconds); 
+0

धन्यवाद, मेरे प्रश्न के अंत में मेरा संपादन देखें। मुझे लगता है कि लंबे समय तक संग्रहीत तारीख (मिलीसेकंड) भविष्य में जाने का एक तरीका हो सकता है लेकिन फिलहाल, मैं किसी और द्वारा बनाई गई एक पीसी एसक्यूएलआईटी डीबी का प्रतिबिंबित कर रहा हूं, इसलिए मैं पीसी/एंड्रॉइड के बीच समान प्रारूपों के साथ चिपक रहा हूं। – Squonk

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