2010-06-24 9 views
12

मैं प्रारूप "yyyymmdd" प्रारूप के साथ एक साधारणडेटफॉर्मैट का उपयोग करके तारीखों को मान्य और पार्स करना चाहता हूं। यह 100624 को भी अनुमति देता है, जिसे वर्ष 10 (जूलियस सीसार की मृत्यु के 54 वर्ष बाद) के लिए पार्स किया जाता है। तिथियां 1 9 70 की तरह कुछ भी होंगी, इसलिए मैं SimpleDateFornat ("yymmdd") के साथ बसना नहीं चाहता हूं।जावा के सरलीडेटफॉर्मेट में 0 अंकों के लिए मजबूर करना

मुझे आश्चर्य है कि SimpleDateFormat का उपयोग करके चार अंकों का वर्ष प्रारूप लागू करने का कोई तरीका है? मैं एक regexp परीक्षण अपफ्रंट करने के करीब हूं लेकिन शायद (सरल) डेटफॉर्मैट() का उपयोग करने का एक स्मार्ट तरीका है?

कोड के अनुरोध के अनुसार, चीजें अधिक जटिल हो रही हैं और मेरा शोध आधा था। प्रयुक्त प्रारूप yyyy-MM-dd के साथ शुरू करने के लिए था (यह एक चर से आया था, जिसमें गलत javadoc था)। हालांकि जैसा कि yyyyMmdd के नीचे एक उत्तर में दर्शाया गया है, चार साल के अंक को मजबूर करता है। तो मेरा सवाल बदल गया है कि "yyyy-MM-dd" प्रारूप के लिए चार अंकों के वर्ष को कैसे बल दिया जाए। और "yyyyMmdd" अलग क्यों व्यवहार करता है? के लिए और उसके बाद जाँच लें कि साल अधिक से अधिक है कुछ निर्दिष्ट तिथि (:

public void testMaturity() { 
    try { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
     sdf.setLenient(false); 
     System.out.println(" " + sdf.format(sdf.parse("40-12-14"))); 
     SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMdd"); 
     sdf.setLenient(false); 
     System.out.println(" " + sdf2.format(sdf2.parse("401214"))); 
     fail(); 
    } catch (ParseException pe) { 
     assertTrue(true); 
    } 

कौन सा प्रिंट 0040-12-14

+0

तारीख yyyymmdd की आवश्यकता है तो साल 10 0010 होगा।मुझे इसके साथ कोई समस्या नहीं दिखाई देती है, आप उन्हें पहले दिन (01) या पहले महीने के लिए 1 दर्ज नहीं करने देते हैं, तो इसे वर्षों तक क्यों अनुमति दें। – Goibniu

उत्तर

3

सीधे शब्दों में yyyyMMdd (अपर केस एम महीने इंगित करने के लिए प्रयोग किया जाता है, अन्यथा you're parsing minutes टिप्पणी!) का उपयोग उदाहरण के लिए, जन्म तिथि को पार करते समय, 1800 से अधिक सुरक्षित शर्त है, जब चालू वर्ष से अधिक या बराबर अपकमिंग तिथियों की तारीखों को पार्स करना अच्छा होगा)।

2

हम्म। मुझे लगता है कि आप "मिमी" के बदले "एम एम" का उपयोग किया जाना चाहिए के साथ शुरू करने के लिए ... लेकिन "100,624" वैसे भी पार्स नहीं है जब मैं यह कोशिश - यहां तक ​​कि उदार मोड में:

import java.util.*; 
import java.text.*; 

public class Test 
{ 
    public static void main(String[] args) throws Exception 
    { 
     SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); 
     format.setLenient(true); 
     tryParse(format, "100624"); 
     format.setLenient(false); 
     tryParse(format, "100624"); 
    } 

    static void tryParse(DateFormat format, String text) 
    { 
     try 
     { 
      Date date = format.parse(text); 
      System.out.println("Parsed " + text + " to " + date); 
     } 
     catch (ParseException pe) 
     { 
      System.out.println("Failed to parse " + text); 
     } 
    } 
} 

(और यहां तक ​​कि का उपयोग करते हुए "एम एम" के बदले "मिमी" यह अभी भी पार्स करने के लिए विफल रहता है)

प्रिंटों:।

Failed to parse 100624 
Failed to parse 100624 

शायद आप कोड इस पार्स करने के लिए प्रबंध है जो दिखा सकता है?

+0

धन्यवाद! मैंने परीक्षण करने के लिए कुछ कोड जोड़े, और पाया कि प्रारूपस्ट्रिंग की अपेक्षा की गई थी और यह कि yyyyMMdd वास्तव में 4 अंकों की वर्ष की आवश्यकता को मजबूर करता है। सामान्य है कि yyyy-MM-dd अलग व्यवहार करता है। –

2

SimpleDateFormat वस्तु पर setLenient(false); कॉल करके देखें - कि यह पार्स करने के लिए अधिक कड़े नियमों का उपयोग कर देगा (अन्यथा यह "स्मार्ट" यदि इनपुट स्ट्रिंग वास्तव में प्रारूप से मेल नहीं खाता होने की कोशिश करेंगे)। उदाहरण के लिए:

DateFormat df = new SimpleDateFormat("yyyyMMdd"); 
df.setLenient(false); 

और बेशक, महीने MM, नहीं mm है।

1

इसके लिए कोई आसान तरीका नहीं है। यदि आप कह रहे हैं कि तिथियां 1 9 70 की तरह हो सकती हैं तो मुख्य प्रश्न 700624 का अर्थ होगा - 1 9 70 या 2070? आपको या तो कुछ कटऑफ तिथि लागू करनी चाहिए जैसे जोआचिम प्रस्तावित या पूरी तरह से 4 अंकों वर्ष तक ले जाएं।

1

वैसे यह काफी सीधे और आगे है। इन आसान चरणों का पालन करें:

चरण 1:

try { 
    String dates = "40-12-14"; 
    String patterns = "yy-MM-dd"; 
    SimpleDateFormat format3 = new SimpleDateFormat(patterns);`` 
    java.util.Date dates1 = format3.parse(dates); 

    SimpleDateFormat sdfDates = new SimpleDateFormat("dd/MM/yyyy"); 

    String strDate1 = sdfDate.format(dates1); 
    System.out.println("Date1: " + strDate1); 

} 
catch(ParseException e){ 
    e.printStackTrace(); 
} 

हो जाएगा ताकि उत्पादन:

Date1: 14/12/1940 
संबंधित मुद्दे