दिलचस्प पोस्ट
आईओएस 9 – यह एप्लीकेशन एक पृष्ठभूमि थ्रेड से ऑटोलेआउट इंजन को संशोधित कर रहा है – जहां? स्थानीय होस्ट पर PHP मेल () फ़ंक्शन HTML5 नेस्टेड अनुभाग और शीर्षक टैग सीधे .aspx से .pdf को परिवर्तित करें BackgroundWorker RunWorkerCompleted ईवेंट कैसे संश्लेषित बनाए रखने के गुणों के लिए रिलीज़ को नियंत्रित किया जाता है? कैसे पता चलेगा कि मेरी कोई गतिविधि सबसे आगे है और उपयोगकर्ता के लिए दृश्यमान है? Android में स्थिर चर का उपयोग करना जावास्क्रिप्ट फ़ाइल इनपुट तत्व से कई विशेषताओं वाले फाइलों और उनके फाइलनामों की संख्या मिलती है? एंड्रॉइड में एक छवि दृश्य में जीआईएफ छवि जोड़ना myDiv.style.display मास्टर स्टाइलशीट में सेट होने पर रिक्त स्थान देता है रूबी में एक proc और लैम्ब्डा के बीच क्या अंतर है? कस्टम सूची फ़ील्ड क्लिक ईवेंट 'क्लिक' ईवेंट पर Ctrl / Shift / Alt कुंजी की जांच करें IPhone पर एक NSString के लिए एईएस एन्क्रिप्शन

कुछ जावा ऑब्जेक्ट में दिनांक स्ट्रिंग पार्स करें

मैं एक परियोजना में काम कर रहा हूं जो फाइलों को पढ़ता है और डेटा को प्रोसेस करता है वहां मुझे तिथियों के साथ काम करना था, उदाहरण के लिए:

  1. 2012-01-10 23:13:26
  2. 13 जनवरी, 2012

मुझे पैकेज जोडा, थोड़े दिलचस्प पैकेज मिला लेकिन पता नहीं है कि यह सबसे आसान आस-पास है या नहीं।

मैं सबसे पहले उदाहरण को एक डेटटाइम ऑब्जेक्ट (जोडा) रेग-एक्स और स्ट्रिंग हेरफेर करने में सक्षम था। (उदा। '-' द्वारा स्थान की जगह और इसे कन्स्ट्रक्टर को पास करके

new DateTime("2012-01-10 23:13:26".replace(' ', '-')) 

मुझे लगता है कि यह काम किया है, लेकिन समस्या दूसरे प्रारूप के साथ है मैं किसी वस्तु को निकालने के लिए इस तरह के इनपुट का उपयोग कैसे कर सकता हूं, अधिमानतः एक Joda ऑब्जेक्ट? मुझे यकीन है कि जेडा का समर्थन करने के लिए प्रारूप को बदलने के लिए एक फ़ंक्शन लिख सकता है, लेकिन यह सोच कर कि क्या ऐसा करने के लिए कुछ अन्य तरीका (यहां तक ​​कि कुछ मूल जावा लाइब्रेरी) होगा।

अगर वहाँ से बाहर जोदा की तुलना में कोई चीज बेहतर है, तो कृपया मुझे इसे भी बताएं।

धन्यवाद।

वेब के समाधान से एकत्रित समाधान "कुछ जावा ऑब्जेक्ट में दिनांक स्ट्रिंग पार्स करें"

जुडा-टाइम का उपयोग करना, डेटटाइम फ़ॉर्मेट पर एक नज़र डालें; यह दोनों प्रकार की तार तारों का वर्णन करने की अनुमति देता है जो कि आप (और लगभग किसी भी अन्य मनमाना प्रारूप) का उल्लेख करते हैं। यदि आपकी ज़रूरतें अधिक जटिल हैं, तो DateTimeFormatterBuilder का प्रयास करें

# 1 को पार्स करने के लिए:

 DateTimeFormatter f = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); DateTime dateTime = f.parseDateTime("2012-01-10 23:13:26"); 

संपादित करें: वास्तव में स्थानीय डेटटाइम एक समय क्षेत्र के लिए एक समय समय के लिए एक अधिक उपयुक्त प्रकार है:

 LocalDateTime dateTime = f.parseLocalDateTime("2012-01-10 23:13:26"); 

और # 2 के लिए:

 DateTimeFormatter f = DateTimeFormat.forPattern("MMMM dd, yyyy"); LocalDate localDate = f.parseLocalDate("January 13, 2012"); 

और हाँ, जोडा-टाइम निश्चित रूप से जाने का रास्ता है, जहां तक ​​जावा की तारीख और समय से निपटने का संबंध है। 🙂

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

अपडेट (2015)

यदि आप जावा 8 पर हैं , तो अधिकांश मामलों में आपको java.time -टाइम के बजाय बस java.time उपयोग करना चाहिए। इसमें बहुत अच्छी चीजें हैं- याडा से-जोडा से। जोडा एपीआई से परिचित लोगों के लिए, स्टीफन कोलबर्न के जोडा-टाइम से जावा। टाइम माइग्रेशन गाइड काम में आता है।

यहां ऊपर दिए गए उदाहरणों के java.time संस्करण हैं।

# 1 को पार्स करने के लिए:

 DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime dateTime = LocalDateTime.from(f.parse("2012-01-10 23:13:26")); 

आप इसे ZonedDateTime या OffsetDateTime (जो Joda की DateTime के समकक्षों, मेरे मूल उत्तर में प्रयोग किया जाता है) में पार्स नहीं कर सकते, लेकिन यह थोड़े समझ में आता है क्योंकि पर्सेड स्ट्रिंग में कोई समय क्षेत्र की जानकारी नहीं है।

# 2 को पार्स करने के लिए:

 DateTimeFormatter f = DateTimeFormatter.ofPattern("MMMM dd, yyyy"); LocalDate localDate = LocalDate.from(f.parse("January 13, 2012")); 

यहां स्थानीयडीट में पार्स करने के लिए सबसे उपयुक्त प्रकार है (बस जोड-टाइम की तरह)।

SimpleDateFormat तिथि दिनांक जावा दिनांक वस्तुओं में पार्स करेगा:

http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

 SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); // first example SimpleDateFormat format2 = new SimpleDateFormat("MMMMM dd,yyyy"); // second example Date d1 = format1.parse( dateStr1 ); Date d2 = format2.parse( dateStr2 ); 

मैं सोचता हूं कि जोडा के पास आपके लिए ऐसा करने के लिए फॉर्मेट का कुछ हिस्सा है। मुझे यह एक त्वरित Google खोज के साथ मिला: http://johannburkard.de/blog/programming/java/date-time-parsing-formatting-joda-time.html

 DateTimeFormatter parser1 = DateTimeFormat.forPattern("dd/MMM/yyyy:HH:mm:ss Z"); DateTimeFormatter parser2 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm"); DateTime time = parser1.parseDateTime("<data>"); 

पैटर्न का मूल्यांकन करने के लिए इस्तेमाल किया गया सिंटैक्स एक्स-ज़ीरो के लिंक में पाया जा सकता है

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

स्ट्रिंग्स से जूडाटाइम की तारीखें पाने के लिए, आप डेटटाइम फॉर्मेट कक्षा में देखना चाहते हैं।

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

tl; डॉ

 LocalDateTime ldt = LocalDateTime.parse( "2012-01-10 23:13:26".replace( " " , "T" ) ); 

…तथा…

 LocalDate localDate = LocalDate.parse ( "January 13, 2012" , DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG ).withLocale ( Locale.US ) ); 

विवरण

Jonik द्वारा जवाब मूल रूप से सही है लेकिन कुछ महत्वपूर्ण मुद्दों को याद करता है।

java.time

अगर वहाँ से बाहर जोदा की तुलना में कोई चीज बेहतर है, तो कृपया मुझे इसे भी बताएं।

हाँ, कुछ बेहतर है, जावा । टाइम फ्रेमवर्क जोडा-टाइम टीम अपने उत्तराधिकारी के रूप में जावा के समय में माइग्रेशन की सलाह देती है।

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

अधिक जानने के लिए, ओरेकल ट्यूटोरियल देखें। और कई उदाहरणों और स्पष्टीकरण के लिए स्टैक अतिप्रवाह खोजें।

ज्यादातर जावा। टाइम कार्यक्षमता को तीन-टेन-बैकपोर्ट में जावा 6 और 7 में बैक-पोर्ट किया गया है और इसे एंड्रॉइड के लिए तीन टाएंबैप में अनुकूलित किया गया है।

दिनांक समय

आपका पहला इनपुट एक तारीख और एक समय का दिन है। इसमें ऑफसेट-यूटीसी या टाइम ज़ोन की जानकारी नहीं है, इसलिए हम उसे LocalDateTime ऑब्जेक्ट के रूप में पार्स करते हैं। "स्थानीय …" का अर्थ है कोई स्थान, कोई विशिष्ट स्थान नहीं। इसलिए यह समयरेखा पर एक वास्तविक क्षण नहीं है बल्कि एक पल के बारे में सिर्फ एक मोटा विचार है।

इनपुट स्ट्रिंग को पार्स करने के लिए 2012-01-10 23:13:26 हम बीच में SPACE को T साथ प्रतिस्थापित कर सकते हैं, जो कि ISO 8601 के दिनांक के समय मानों के मानक प्रारूप के लिए कैनोनिकल शैली के अनुरूप है।

जावा.टाइम कक्षा आईएसओ 8601 फॉर्मेट डिफ़ॉल्ट रूप से उपयोग करते हैं, जब दिनांक समय के मूल्यों का पाठ प्रस्तुत करते हैं और उन्हें पैदा करते हैं। तो एक पार्सिंग पैटर्न को परिभाषित करने की कोई ज़रूरत नहीं है

 String input = "2012-01-10 23:13:26".replace( " " , "T" ); LocalDateTime ldt = LocalDateTime.parse( input ); 

यदि आप इस मूल्य के संदर्भ से इच्छित समय क्षेत्र को जानते हैं, तो समयरेखा पर एक वास्तविक क्षण को परिभाषित करने के लिए इसे लागू करें।

 ZoneId zoneId = ZoneId.of( "America/Montreal" ); ZonedDateTime zdt = ldt.atZone( zoneId ); 

डंप करने के लिए कंसोल

 System.out.println ( "input: " + input + " | zdt: " + zdt ); 

इनपुट: 2012-01-10 टी 23: 13: 26 | zdt: 2012-01-10T23: 13: 26-05: 00 [अमेरिका / मॉन्ट्रियल]

दिनांक-केवल

आप में से दूसरा डेटा समय-प्रतिदिन के बिना और समय क्षेत्र के बिना केवल-तिथि मान है। इसके लिए हमें LocalDate क्लास की आवश्यकता है।

मैं भाषा (अंग्रेजी) और संयुक्त राज्य के सांस्कृतिक मानदंडों के पालन के रूप में उस इनपुट का प्रारूप पहचानता हूं। इसलिए किसी स्वरूपण पैटर्न को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता नहीं है। हम बस एक फॉर्मेटर के लिए पूछ सकते हैं जो कि एक Locale को निर्दिष्ट करके यूएस प्रारूप का पता Locale । हम इस प्रारूप की लंबाई के लिए उपयुक्त प्रारूप FormatStyle.LONG निर्दिष्ट करते हैं।

 String input = "January 13, 2012"; DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG ).withLocale ( Locale.US ); LocalDate localDate = LocalDate.parse ( input , formatter ); 

डंप करने के लिए कंसोल

 System.out.println ( "input: " + input + " | localDate: " + localDate ); 

इनपुट: 13 जनवरी 2012 | स्थानीय दिनांक: 2012-01-13