java - जावा तिथिफ़ॉर्मेट/लोकल के साथ सरलडेटफ़ॉर्मेट(केवल महीने और महीने में दिन दिखाएं)




date format (2)

मेरे पास बहुसांस्कृतिक अनुप्रयोग है, परियोजना जावा 7 का उपयोग करती है। मुझे तिथि दिखाने की जरूरत है, लेकिन केवल महीने और महीने में दिन। उदाहरण के लिए, लोकेल में उदाहरण: यूके आज की तारीख ऐसा दिखता है: 24/01, लेकिन लोकेल में। यू की तरह: 1/24 जावा 7 में इसे कैसे हासिल किया जाए? मैंने DateFormat.getDateInstance (dateFormat, locale) का उपयोग करने की कोशिश की, लेकिन इस मामले में मैं सिर्फ पूर्वनिर्धारित दिनांक स्वरूपों का उपयोग कर सकता हूं, उदाहरण के लिए DateFormat.SHORT, DateFormat.DEFAULT आदि। केवल महीने और महीने में दिन के साथ कोई पूर्वनिर्धारित प्रारूप नहीं है। इसके बाद मैंने स्थानीय के साथ SimpleDateFormat का उपयोग करने की कोशिश की, लेकिन मुझे आश्चर्य है कि यह काम नहीं कर रहा है, यह केवल स्थानीय पाठ के अनुसार कुछ पाठ का अनुवाद करता है। यहां मेरा नमूना कोड है:

  DateFormat dfuk = DateFormat.getDateInstance(DateFormat.SHORT, Locale.UK);
  DateFormat dfus = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
  System.out.println(dfuk.format(new Date()));  // 24/01/17
  System.out.println(dfus.format(new Date()));  // 1/24/17
  SimpleDateFormat sdfuk = new SimpleDateFormat("dd/MM", Locale.UK);
  SimpleDateFormat sdfus = new SimpleDateFormat("dd/MM", Locale.US);
  System.out.println(sdfuk.format(new Date()));  // 24/01
  System.out.println(sdfus.format(new Date()));  // 24/01

मुझे 01/24 (या 1/24) प्रिंट करने के लिए अंतिम पंक्ति की उम्मीद है। यह कैसे प्राप्त करें?


अपनी तीसरी आखिरी पंक्ति में बदलें

SimpleDateFormat sdfus = new SimpleDateFormat("MM/dd", Locale.US);

क्या मानक जावा प्रदान करता है की कमी पर काबू पाने:

getDateInstance() विधि style लिए एक तर्क लेता style । सबसे छोटा शैली है DateFormat.SHORT लगता है। आप यह तर्क दे सकते हैं कि संभवतः उन्हें एक प्रदान करना चाहिए जो कि बहुत छोटा है ( DateFormat.SHORTER शायद DateFormat.SHORTER ?) सीएफ

http://docs.oracle.com/javase/6/docs/api/java/text/DateFormat.html#getDateInstance(int)

ऐसा होने से पहले, आप छोटी शैली के लिए पैटर्न का एक बड़ा आकार बना सकते हैं। नीचे एक उदाहरण है:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

enum PatternShorter { // or PatternMonthDayOnly
    MM_SLASH_DD     ("MM/dd")
    , DD_SLASH_MM   ("dd/MM")
    ;
    private String pattern;

    public String getPattern() {
        return pattern;
    }

    private PatternShorter(String pattern) {
        this.pattern = pattern;
    }

    public static PatternShorter getDefault() { return DD_SLASH_MM; }
}

public class DateFormatEx {
    private static Map<Locale, PatternShorter> patternShorter = new HashMap<>();

    static {
        patternShorter.put(Locale.UK, PatternShorter.DD_SLASH_MM);
        patternShorter.put(Locale.UK, PatternShorter.MM_SLASH_DD);
        // any locale not listed here will get the default pattern
    }

    private static String getPattern (Locale locale) {      
        if (patternShorter.get(locale)!=null) {
            return patternShorter.get(locale).getPattern();
        } else {
            return PatternShorter.getDefault().getPattern();
        }
    }

    public static void main(String[] args) {
        List<Locale> listOfLocale = Arrays.asList(Locale.UK, Locale.US, Locale.FRENCH);
        for (Locale locale : listOfLocale) {
            SimpleDateFormat fmt 
            = new SimpleDateFormat(getPattern(locale), locale);
            System.out.format("for locale %s the shorter date/month display is: %s%n"
                    , locale.toString()
                    , fmt.format(new Date()));  
        }
    }

}

उत्पादन होगा:

for locale en_GB the shorter date/month display is: 01/24
for locale en_US the shorter date/month display is: 24/01
for locale fr the shorter date/month display is: 24/01

आपका कोड उसी प्रारूप को फेंक रहा था क्योंकि दोनों तिथि स्वरूप समान पैटर्न के साथ बनाए गए थे और ये सही नहीं है ..

SimpleDateFormat sdfuk = new SimpleDateFormat("dd/MM", Locale.UK);
SimpleDateFormat sdfus = new SimpleDateFormat("dd/MM", Locale.US);

आपको स्थानीय की आवश्यकता होगी यदि आपके पास एक स्ट्रिंग है जिसे आज तक बदला जा रहा है ... पार्स करने के लिए आप कोशिश कर रहे हैं (स्ट्रिंग -> दिनांक) केवल पैटर्न ठीक है ...

उदाहरण

DateFormat sdfuk = new SimpleDateFormat("dd/MM");
DateFormat sdfus = new SimpleDateFormat("MM/d");
System.out.println(sdfuk.format(new Date())); // 24/01
System.out.println(sdfus.format(new Date())); // 01/24






locale