2012-12-17 31 views
17

मुझे एक स्ट्रिंग युक्त तारीख को दिनांक वस्तु में परिवर्तित करने की आवश्यकता है। स्ट्रिंग "yyyy-mm-dd hH: mm: ss.SSSSSS" प्रारूप का होगा और मैं एक ही प्रारूप को दिनांक वस्तु में चाहता हूं।प्रारूप के दिनांक वस्तु के लिए जावा स्ट्रिंग "yyyy-mm-dd एचएच: मिमी: एसएस"

उदाहरण के लिए मेरे पास "2012-07-10 14: 58: 00.000000" स्ट्रिंग है, और मुझे परिणामी दिनांक वस्तु को उसी प्रारूप के लिए चाहिए।

मैंने नीचे दिए गए तरीकों का प्रयास किया है, लेकिन परिणामस्वरूप अपेक्षित नहीं है।

java.util.Date temp = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss.SSSSSS").parse("2012-07-10 14:58:00.000000"); 

DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss"); 
       Date thisDate = dateFormat.parse("2012-07-10 14:58:00.000000"); 

परिणाम "जनवरी 10 14:58:00 ईएसटी 2012" है। कृपया मुझे बताएं कि मैं कहां गलत हूं।

धन्यवाद, Yeshwanth कोटा

+0

"जनवरी 10 14:58:00 ईएसटी 2012" का उत्पादन क्या हो रहा है? क्या आप 'System.out.println (thisDate) चला रहे हैं? – Gili

+2

आप मिनटों और महीनों के लिए 'मिमी' का उपयोग कर रहे हैं। आपने अपेक्षा की थी कि 'SimpleDateFormat' प्रदान की गई स्ट्रिंग में मिनटों और महीनों के बीच अंतर करेगा? कृपया एक बार फिर javadoc में पैटर्न तालिका पढ़ें: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat।एचटीएमएल – BalusC

+0

@Gili: हाँ, मैं System.out.println (thisDate) का उपयोग कर रहा हूं। –

उत्तर

44
java.util.Date temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS").parse("2012-07-10 14:58:00.000000"); 

mm मिनट है आप चाहते हैं MM

कोड

public class Test { 

    public static void main(String[] args) throws ParseException { 
     java.util.Date temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS") 
       .parse("2012-07-10 14:58:00.000000"); 
     System.out.println(temp); 
    } 
} 

प्रिंटों:

मंगल जुला 10 14:58:00 EDT 2012

+0

मैंने System.out.println (temp) का उपयोग किया, और परिणाम अभी भी वही है। अगर मैं कुछ बेवकूफ गलती कर रहा हूं, तो मैं क्षमा चाहता हूं, लेकिन मैं इसे समझने में सक्षम नहीं हूं। –

+0

@ यशवंतकोटा क्या आपने अपना कोड पुनः संकलित किया था? – Woot4Moo

+0

हाँ, मैंने किया। मेरे पास बस System.out.println (temp) है; मेरे कोड में –

0

भविष्य में संदर्भ के लिए:

yyyy => 4 digit year 
MM => 2 digit month (you must type MM in ALL CAPS) 
dd => 2 digit "day of the month" 

HH => 2-digit "hour in day" (0 to 23) 
mm => 2-digit minute (you must type mm in lowercase) 
ss => 2-digit seconds 
SSS => milliseconds 

तो "yyyy-MM-yyyy HH: mm: ss" रिटर्न "2018/01/05 09 : 49: 32 "

लेकिन" dd MMM, yyyy hh: mm एक "रिटर्न" जनवरी 05, 2018 09:49 am "

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html पर तथाकथित उदाहरण केवल उत्पादन दिखा। वे आपको नहीं बताते कि किस प्रारूप का उपयोग करना है!

+0

एफवाईआई, परेशानी 'SimpleDateFormat' कक्षा जावा 8 और 9 में निर्मित जावा.टाइम कक्षाओं द्वारा वर्षों से बाहर हो गई है। विशेष रूप से, ['DateTimeFormatter'] (https: // docs। oracle.com/javase/9/docs/api/java/time/format/DateTimeFormatter.html)। जावा के शुरुआती संस्करणों के साथ बंडल की जाने वाली पुराने डेट-टाइम कक्षाओं से बचा जाना चाहिए। –

0

tl; डॉ

LocalDateTime.parse( 
    "2012-07-10 14:58:00.000000".replace(" " , "T") 
) 

माइक्रोसेकंड

फिट नहीं है आप माइक्रोसेकंड (छह दशमलव अंक) एक डेटा केवल मिलीसेकेंड संकल्प में सक्षम प्रकार में साथ एक मूल्य निचोड़ करने के लिए प्रयास कर रहे हैं (तीन दशमलव अंक) । वह असंभव है।

इसके बजाय, पर्याप्त पर्याप्त रिज़ॉल्यूशन वाले डेटा प्रकार का उपयोग करें। java.time कक्षाएं नैनोसेकंद संकल्प (नौ दशमलव अंक) का उपयोग करती हैं।

Unzoned इनपुट एक zoned प्रकार

फिट नहीं करता है आप की कमी एक मूल्य डाल करने के लिए प्रयास कर रहे हैं किसी भी ऑफसेट-से-यूटीसी या समय क्षेत्र डेटा प्रकार (Date) है कि केवल यूटीसी में मूल्यों का प्रतिनिधित्व करता है में। तो आप इनपुट (यूटीसी ऑफसेट) जोड़ रहे हैं जो इनपुट द्वारा इरादा नहीं है।

इसके बजाए उचित डेटा प्रकार का उपयोग करें। विशेष रूप से, java.time.LocalDateTime

केस-संवेदी

अन्य जवाब और टिप्पणियाँ सही ढंग से समझाने कि स्वरूपण पैटर्न कोड केस-संवेदी है। तो MM और mm के विभिन्न प्रभाव हैं।

बचें विरासत कक्षाएं

परेशानी पुराने तिथि-समय वर्गों जावा के जल्द से जल्द संस्करणों के साथ बंडल अब विरासत, java.time जावा 8 और बाद में बनाया गया वर्गों द्वारा का स्थान ले लिया है।

आईएसओ 8601

आपका इनपुट तार लगभग आईएसओ 8601 मानक प्रारूप का पालन करते हैं। पूरी तरह से पालन करने के लिए स्पेस को T के साथ बीच में बदलें।

java.time कक्षा स्ट्रिंग को पार्सिंग/जनरेट करते समय मानक स्वरूपों का डिफ़ॉल्ट रूप से उपयोग करते हैं। तो स्वरूपण पैटर्न निर्दिष्ट करने की कोई आवश्यकता नहीं है।

दिनांक समय वस्तुओं नहीं "प्रारूप"

है और मैं उसके एवज में तारीख वस्तु की जरूरत है एक ही प्रारूप का किया जाना है।

नहीं, डेट-टाइम ऑब्जेक्ट्स में "प्रारूप" नहीं है। केवल तारों के साथ डेट-टाइम ऑब्जेक्ट्स को भंग न करें। स्ट्रिंग्स ऑब्जेक्ट्स के इनपुट और आउटपुट हैं। ऑब्जेक्ट्स डेट-टाइम जानकारी के अपने आंतरिक प्रतिनिधित्व को बनाए रखते हैं, जिनके विवरण प्रोग्रामर को कॉल करने के रूप में हमारे लिए अप्रासंगिक हैं।

java.time

आपका इनपुट ऑफसेट-से-यूटीसी या परेशानी मुझे क्षेत्र के किसी भी सूचक का अभाव है। इसलिए हम LocalDateTime ऑब्जेक्ट्स के रूप में पार्स करते हैं जिनमें उन अवधारणाओं की कमी होती है।

String input = "2012-07-10 14:58:00.000000".replace(" " , "T") ; 
LocalDateTime ldt = LocalDateTime.parse(input) ; 

जनरेट कर रहा है तार

एक स्ट्रिंग अपने LocalDateTime के मूल्य का प्रतिनिधित्व बनाने के लिए:

  • कॉल toString मानक आईएसओ 8601 प्रारूप में एक स्ट्रिंग प्राप्त करने के लिए।
  • कस्टम प्रारूपों या स्वचालित रूप से स्थानीय प्रारूपों में तारों के उत्पादन के लिए DateTimeFormatter का उपयोग करें।

अधिक जानकारी के लिए खोज स्टैक ओवरफ़्लो के रूप में इन विषयों को कई बार पहले से कवर किया गया है।

ZonedDateTime

एक LocalDateTimeनहीं समय रेखा पर एक सटीक बिंदु का प्रतिनिधित्व करता है।

वास्तविक क्षण निर्धारित करने के लिए, समय क्षेत्र असाइन करें। उदाहरण के लिए कोलकाता में दोपहर भारत पेरिस फ्रांस में दोपहर से बहुत पहले आता है। समय क्षेत्र के बिना दोपहर 26-27 घंटों की सीमा से किसी भी समय हो सकता है।

ZoneId z = ZoneId.of("Asia/Kolkata") ; 
ZonedDateTime zdt = ldt.atZone(z) ; 

बारे java.time

java.time ढांचे जावा 8 और बाद में बनाया गया है। ये कक्षाएं परेशान पुराने legacy दिनांक-समय कक्षाएं जैसे java.util.Date, Calendar, & SimpleDateFormat प्रदान करती हैं।

Joda-Time प्रोजेक्ट, अब maintenance mode में, java.time कक्षाओं में माइग्रेशन की सलाह देता है।

और जानने के लिए, Oracle Tutorial देखें। और कई उदाहरणों और स्पष्टीकरणों के लिए स्टैक ओवरफ़्लो खोजें। विशिष्टता JSR 310 है।

आप अपने डेटाबेस के साथ java.time ऑब्जेक्ट्स का आदान-प्रदान कर सकते हैं। JDBC 4.2 या बाद में JDBC driver का अनुपालन करें। तारों की कोई ज़रूरत नहीं है, java.sql.* कक्षाओं की कोई आवश्यकता नहीं है।

जावा.टाइम कक्षाएं कहां प्राप्त करें?

  • Java SE 8, Java SE 9, और बाद में
    • में निर्मित।
    • एक बंडल कार्यान्वयन के साथ मानक जावा एपीआई का हिस्सा।
    • जावा 9 कुछ मामूली विशेषताओं और सुधारों को जोड़ता है।
  • Java SE 6 और Java SE 7
    • java.time कार्यक्षमता की ज्यादातर ThreeTen-Backport में जावा 6 & से 7 वापस भेजा गया है।
  • Android
    • java.time वर्गों के एंड्रॉयड बंडल कार्यान्वयन के बाद के संस्करण।
    • पहले एंड्रॉइड के लिए, ThreeTenABP प्रोजेक्ट थ्रीटेन-बैकपोर्ट (ऊपर उल्लिखित) का अनुकूलन करता है। How to use ThreeTenABP… देखें।

ThreeTen-Extra परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के संभावित भविष्य के जोड़ों के लिए एक सिद्ध भूमि है। आपको यहां कुछ उपयोगी कक्षाएं मिल सकती हैं जैसे Interval, YearWeek, YearQuarter, और more