एंड्रॉइड में दिनांक और समय को कैसे प्रारूपित करें?


321

वर्ष, महीना, दिन, घंटा और मिनट होने पर डिवाइस कॉन्फ़िगरेशन दिनांक और समय के अनुसार सही प्रारूप कैसे करें?

जवाबों:


291

मानक Java DateFormat वर्ग का उपयोग करें।

उदाहरण के लिए वर्तमान तिथि और समय प्रदर्शित करने के लिए निम्न कार्य करें:

Date date = new Date(location.getTime());
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));

आप अपने स्वयं के मूल्यों के साथ दिनांक ऑब्जेक्ट को इनिशियलाइज़ कर सकते हैं, हालाँकि आपको इस बात की जानकारी होनी चाहिए कि कंस्ट्रक्टरों को हटा दिया गया है और आपको वास्तव में जावा कैलेंडर ऑब्जेक्ट का उपयोग करना चाहिए।


42
यह java.text.DateFormat के बजाय android.text.format.DateFormat है।
जम्‍मू

4
एंड्रॉइड आईएमई के दो वर्गों के लिए यह बहुत विशिष्ट है कि दोनों आपको एक परिणाम देने का दावा करते हैं जो डिफ़ॉल्ट लोकेल पर सेट है, लेकिन एक नहीं करता है। तो हाँ, DateFormat के android.text.format संस्करण का उपयोग करना न भूलें (जो कि java.util को एक LOL प्राप्त नहीं करता है)।
mxcl

22
कृपया इस पंक्ति पर ध्यान दें: DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());लौटा हुआ दिनांक फ़र्मरेट प्रकार का है java.text.DateFormat(और नहीं android.text.format.DateFormat)
आर्य रोसेनस्टीन

2
@ हर्ष - उस मुद्दे को हल करने के लिए, मैं अपने डेटफ़ॉर्मट के उपयोग को श्रृंखलाबद्ध करता हूं इसलिए मुझे केवल एंड्रॉइड क्लास का संदर्भ देना है और इसलिए कोई अस्पष्ट कक्षाएं नहीं हैं। अंतिम स्ट्रिंग dateStr = DateFormat.getDateFormat (यह) .format (d); आप एंड्रॉइड के प्रारूप () विधि और (IMHO) क्लीनर कोड का उपयोग कर सकते हैं और इंस्टेंट करने के लिए एक कम वस्तु।
जैरी ब्रैडी

23
इस फॉर्मेट में केवल तारीख शामिल है, न कि मूल प्रश्न के रूप में बताया गया समय। इसके बजाय एक ही पैकेज से डेट यूटिल्स का उपयोग करें, देखें stackoverflow.com/questions/2983920/…
Asmo Soinio

203

मेरी राय में, android.text.format.DateFormat.getDateFormat(context)मुझे भ्रमित करता है क्योंकि यह विधि - - "के java.text.DateFormatबजाय वापस आती है android.text.format.DateFormat

इसलिए, मैं अपने प्रारूप में वर्तमान तिथि / समय प्राप्त करने के लिए नीचे दिए गए खंड कोड का उपयोग करता हूं।

android.text.format.DateFormat df = new android.text.format.DateFormat();
df.format("yyyy-MM-dd hh:mm:ss a", new java.util.Date());

or

android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss a", new java.util.Date());

इसके अलावा, आप अन्य प्रारूपों का उपयोग कर सकते हैं। DateFormat का पालन करें ।


21
उपयोगी, लेकिन सवाल ने कहा "डिवाइस कॉन्फ़िगरेशन के अनुसार"। मेरे लिए इसका मतलब है कि उपयोगकर्ता की भाषा / देश के आधार पर चुने गए प्रारूप का उपयोग करना, या उपयोगकर्ता द्वारा सीधे चुना जाना, बजाय प्रारूप की पसंद को हार्डकोड किए।
क्रिस बॉयल

17
भी भूल नहीं है कि hh:mm:ssआप दे देंगे 01:00:001 PM के लिए, आप का उपयोग करना होगा kk:mm:ssप्राप्त करने के लिए13:00:00
Dnet

2
@dnet kदिन में घंटे (1-24) है, क्या आपका मतलब यह नहीं है H, जो दिन में घंटे (0-23), उदा। HH: mm: ss? देखें: developer.android.com/reference/java/text/SimpleDateFormat.html
जॉनी

1
@ जॉनी नं, java.text.SimpleDateFormat(आपके द्वारा लिंक किए गए और H0-23 रेंज में घंटों के लिए उपयोग किए जाने वाले) और android.text.format.DateFormat( 0-23 रेंज में घंटों के बारे में क्या जवाब है और उपयोग करता है k) के बीच
अंतर है

@dnet परीक्षण के बाद, आप के बारे में सही हैं k, हालांकि, DateFormatस्पष्ट रूप से राज्यों के लिए प्रलेखन प्रारूप के तार के विहित प्रलेखन के लिए, SimpleDateFormat देखें। बहुत ज्यादा उलझन। या क्या मैं कुछ न कुछ भूल रहा हूं?
जॉनी

145

आप उपयोग कर सकते हैं DateFormat। परिणाम फोन के डिफ़ॉल्ट लोकेल पर निर्भर करता है, लेकिन आप लोकेल को भी निर्दिष्ट कर सकते हैं:

https://developer.android.com/reference/java/text/DateFormat.html

यह एक पर परिणाम है

DateFormat.getDateInstance().format(date)                                          

एफआर लोकेल: 3 नोव। 2017

यूएस / एन लोकेल: 12 जनवरी, 1952


DateFormat.getDateInstance(DateFormat.SHORT).format(date)

FR लोकेल: 03/11/2017

यूएस / एन लोकेल: 12.13.52


DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)

एफआर लोकेल: 3 नोव। 2017

यूएस / एन लोकेल: 12 जनवरी, 1952


DateFormat.getDateInstance(DateFormat.LONG).format(date)

एफआर लोकेल: 3 नोवम्ब्रे 2017

यूएस / एन लोकेल: 12 जनवरी, 1952


DateFormat.getDateInstance(DateFormat.FULL).format(date)

एफआर लोकेल: वेजग्रेडी 3 नोवम्ब्रे 2017

यूएस / एन लोकेल: मंगलवार, 12 अप्रैल, 1952


DateFormat.getDateTimeInstance().format(date)

एफआर लोकेल: 3 नोव। 2017 16:04:58


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date)

FR लोकेल: 03/11/2017 16:04


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)

FR लोकेल: 03/11/2017 16:04:58


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)

FR लोकेल: 03/11/2017 16:04:58 GMT + 01: 00


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date)

एफआर लोकेल: 03/11/2017 16:04:58 हेयर्ड नॉर्माले डी 'इरोपे सेंट्रेल


DateFormat.getTimeInstance().format(date)

एफआर लोकेल: 16:04:58


DateFormat.getTimeInstance(DateFormat.SHORT).format(date)

एफआर लोकेल: 16:04


DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)

एफआर लोकेल: 16:04:58


DateFormat.getTimeInstance(DateFormat.LONG).format(date)

एफआर लोकेल: 16:04:58 जीएमटी + 01: 00


DateFormat.getTimeInstance(DateFormat.FULL).format(date)

एफआर लोकेल: 16:04:58 हेयर्ड नॉर्माले डी 'यूरोपे सेंट्रेल



4
इन सभी मामलों को एक जगह रखने के लिए धन्यवाद। यदि आप समय के साथ ही मामलों को जोड़ सकते हैं, तो यह इसे संपूर्ण संदर्भ बना देगा।
जीशान

41

स्थान की तारीख स्ट्रिंग के लिए दिनांक:

Date date = new Date();
String stringDate = DateFormat.getDateTimeInstance().format(date);

विकल्प:

   DateFormat.getDateInstance() 

-> 31 दिसंबर, 1969

   DateFormat.getDateTimeInstance() 

-> 31 दिसंबर, 1969 4:00:00 अपराह्न

   DateFormat.getTimeInstance() 

-> 4:00:00 अपराह्न


3
DateFormat.getDateInstance () से वर्ष कैसे निकालें?
हार्दिक जोशी

21

यह यह करेगा:

Date date = new Date();
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText("Time: " + dateFormat.format(date));

जब उपयोगकर्ता Android डिवाइस में भाषा बदलता है तो क्या यह स्थानीयकृत हो जाएगा?
Kannan_SJD

14

SimpleDateFormat का उपयोग करें

ऐशे ही:

event.putExtra("starttime", "12/18/2012");

SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Date date = format.parse(bundle.getString("starttime"));

5
हां, प्रदर्शन के मुद्दों से बचने के लिए डिफ़ॉल्ट लोकेल के साथ :new SimpleDateFormat("my-format", Locale.getDefault());
iutinvg

14

इसके बाद: http://developer.android.com/reference/android/text/format/Time.html

Android देशी समय वर्ग का उपयोग करना बेहतर है:

Time now = new Time();
now.setToNow();

फिर प्रारूप:

Log.d("DEBUG", "Time "+now.format("%d.%m.%Y %H.%M.%S"));

1
@ फ़ायरज़ेनक: [लिंक] ( developer.android.com/reference/android/text/format/Time.html ) के अनुसार आपने प्रदान किया: इस वर्ग में कई समस्याएँ हैं और यह अनुशंसा की जाती है कि इसके बजाय ग्रेगोरियन कैलेन्डर का उपयोग किया जाता है
ccpizza 14

ओह ... यह मुद्दा-जानकारी मेरी टिप्पणी की तुलना में नया है, इसलिए इसका एक
संक्षिप्त

10

इन दोनों का उपयोग वर्ग चर के रूप में करें:

 public java.text.DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
 private Calendar mDate = null;

और इसे इस तरह से उपयोग करें:

 mDate = Calendar.getInstance();
 mDate.set(year,months,day);                   
 dateFormat.format(mDate.getTime());

9

यह मेरी विधि है, आप परिभाषित कर सकते हैं और इनपुट और आउटपुट प्रारूप।

public static String formattedDateFromString(String inputFormat, String outputFormat, String inputDate){
    if(inputFormat.equals("")){ // if inputFormat = "", set a default input format.
        inputFormat = "yyyy-MM-dd hh:mm:ss";
    }
    if(outputFormat.equals("")){
        outputFormat = "EEEE d 'de' MMMM 'del' yyyy"; // if inputFormat = "", set a default output format.
    }
    Date parsed = null;
    String outputDate = "";

    SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, java.util.Locale.getDefault());
    SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, java.util.Locale.getDefault());

    // You can set a different Locale, This example set a locale of Country Mexico.
    //SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, new Locale("es", "MX"));
    //SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, new Locale("es", "MX"));

    try {
        parsed = df_input.parse(inputDate);
        outputDate = df_output.format(parsed);
    } catch (Exception e) { 
        Log.e("formattedDateFromString", "Exception in formateDateFromstring(): " + e.getMessage());
    }
    return outputDate;

}

8

SimpleDateFormat

मैं डिवाइस के छंटनी प्रारूप में सिस्टम से वास्तविक तिथि और समय प्राप्त करने के लिए कस्टम पैटर्न के बिना SimpleDateFormat का उपयोग करता हूं :

public static String getFormattedDate() {
    //SimpleDateFormat called without pattern
    return new SimpleDateFormat().format(Calendar.getInstance().getTime());
}

रिटर्न :

  • 13.01.15 11:45
  • 1/13/15 10:45 पूर्वाह्न
  • ...

7

टाइम क्लास में बिल्ड का उपयोग करें!

Time time = new Time();
time.set(0, 0, 17, 4, 5, 1999);
Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));

यह इष्टतम समाधान है क्योंकि यह एंड्रॉइड फ्रेमवर्क से हल्के समय ऑब्जेक्ट का उपयोग करता है: developer.android.com/reference/android/text/format/Time.html
डीन वाइल्ड

13
यह वह जगह है नहीं इष्टतम समाधान: यह उपयोगकर्ता किसी भी स्थान से दिनांक स्वरूप सम्मान नहीं करता।
डैन हुल्मे

5

अन्य उत्तर आम तौर पर सही होते हैं। मुझे आधुनिक उत्तर में योगदान देना चाहिए। कक्षाएं Date, DateFormatऔर SimpleDateFormatअधिकांश अन्य उत्तरों में उपयोग की जाने वाली, लंबे समय तक पुरानी हैं और कई वर्षों से कई प्रोग्रामर के लिए परेशानी का कारण बनी हुई हैं। आज हमारे पास java.timeAKA JSR-310, आधुनिक जावा तिथि और समय एपीआई में इतना बेहतर है । क्या आप अभी तक Android पर इसका उपयोग कर सकते हैं? सबसे निश्चित रूप से! थ्रीटेनेबप प्रोजेक्ट में आधुनिक कक्षाओं को एंड्रॉइड पर वापस भेज दिया गया है। इस प्रश्न को देखें : सभी विवरणों के लिए एंड्रॉइड प्रोजेक्ट में थ्रीटेनबप का उपयोग कैसे करें

यह स्निपेट आपको आरंभ करना चाहिए:

    int year = 2017, month = 9, day = 28, hour = 22, minute = 45;
    LocalDateTime dateTime = LocalDateTime.of(year, month, day, hour, minute);
    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
    System.out.println(dateTime.format(formatter));

जब मैं अपने कंप्यूटर की पसंदीदा भाषा US अंग्रेजी या UK अंग्रेजी में सेट करता हूं, तो यह प्रिंट करता है:

Sep 28, 2017 10:45:00 PM

जब इसके बजाय मैंने इसे डेनिश में सेट किया, तो मैंने पाया:

28-09-2017 22:45:00

तो यह कॉन्फ़िगरेशन का पालन करता है। मैं इस बात को लेकर अनिश्चित हूं कि यह आपके डिवाइस की तारीख और समय की सेटिंग का क्या विवरण देता है, हालांकि, और यह फोन से फोन पर भिन्न हो सकता है।


5

यह कोड मेरे लिए काम करता है!

Date d = new Date();
    CharSequence s = android.text.format.DateFormat.format("MM-dd-yy hh-mm-ss",d.getTime());
    Toast.makeText(this,s.toString(),Toast.LENGTH_SHORT).show();

5

डेट फॉर्मेट क्लास डेट बनाने के लिए चीट कोड के साथ काम करता है। पसंद

  1. एम -> 7, एमएम -> 07, एमएमएम -> जुलाई, एमएमएमएम -> जुलाई
  2. ईईई -> ट्यू, ईईईई -> मंगलवार
  3. z -> EST, zzz -> EST, zzzz -> पूर्वी मानक समय

आप यहां अधिक धोखा दे सकते हैं


4

यह कोड वर्तमान तिथि और समय लौटाएगा:

public String getCurrDate()
{
    String dt;
    Date cal = Calendar.getInstance().getTime();
    dt = cal.toLocaleString();
    return dt;
}

1
toLocaleString () पदावनत है
nspo

4

स्थान

मिलीसेकंड से स्थानीय प्रारूप में दिनांक या समय प्राप्त करने के लिए मैंने इसका उपयोग किया:

दिनांक और समय

Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);

तारीख

Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault());
dateFormat.format(date);

समय

Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);

आप अन्य दिनांक शैली और समय शैली का उपयोग कर सकते हैं। शैलियों के बारे में अधिक जानकारी यहाँ


4

सबसे छोटा तरीका:

// 2019-03-29 16:11
String.format("%1$tY-%<tm-%<td %<tR", Calendar.getInstance())

%tRके लिए कम है %tH:%tM, <अंतिम पैरामीटर ( 1$) का पुन: उपयोग करने का मतलब है ।

के बराबर है String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM", Calendar.getInstance())

https://developer.android.com/reference/java/util/Formatter.html


2

प्रयत्न:

event.putExtra("startTime", "10/05/2012");

और जब आप पास किए गए चर तक पहुँच रहे हैं:

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = formatter.parse(bundle.getString("startTime"));

2

मैं इसे इस तरह से उपयोग करता हूं:

public class DateUtils {
    static DateUtils instance;
    private final DateFormat dateFormat;
    private final DateFormat timeFormat;

    private DateUtils() {
        dateFormat = android.text.format.DateFormat.getDateFormat(MainApplication.context);
        timeFormat = android.text.format.DateFormat.getTimeFormat(MainApplication.context);
    }

    public static DateUtils getInstance() {
        if (instance == null) {
            instance = new DateUtils();
        }
        return instance;
    }

    public synchronized static String formatDateTime(long timestamp) {
        long milliseconds = timestamp * 1000;
        Date dateTime = new Date(milliseconds);
        String date = getInstance().dateFormat.format(dateTime);
        String time = getInstance().timeFormat.format(dateTime);
        return date + " " + time;
    }
}

1

जूडे से बचें

Java.util.Date और .Calendar और SimpleDateFormat in Java (और Android) कुख्यात रूप से परेशान करने वाले हैं। इनसे बचें। वे इतने बुरे हैं कि Sun / Oracle ने उन्हें छोड़ दिया, जावा 8 में नए java.time पैकेज के साथ उन्हें दबा दिया (2014 तक एंड्रॉइड में नहीं)। नया जोडा-टाइम लाइब्रेरी java.timeसे प्रेरित था ।

Joda समय

Joda-Time Android में काम करता है।

कई उदाहरण और बहुत चर्चा खोजने के लिए "Joda" के लिए StackOverflow खोजें।

जोडा-टाइम 2.4 का उपयोग करके सोर्स कोड का एक टिडबिट।

मानक प्रारूप।

String output = DateTime.now().toString(); 
// Current date-time in user's default time zone with a String representation formatted to the ISO 8601 standard.

स्थानीय स्वरूप।

String output = DateTimeFormat.forStyle( "FF" ).print( DateTime.now() ); 
// Full (long) format localized for this user's language and culture.

1

2016 में वापस, जब मैं प्रारूप को अनुकूलित करना चाहता हूं (डिवाइस कॉन्फ़िगरेशन के अनुसार नहीं, जैसा कि आप पूछते हैं ...) मैं आमतौर पर स्ट्रिंग संसाधन फ़ाइल का उपयोग करता हूं:

in strings.xml:

<string name="myDateFormat"><xliff:g id="myDateFormat">%1$td/%1$tm/%1$tY</xliff:g></string>

गतिविधि में:

Log.d(TAG, "my custom date format: "+getString(R.string.myDateFormat, new Date()));

यह नई दिनांक बंधन लाइब्रेरी की रिलीज़ के साथ भी उपयोगी है ।

तो मेरे पास लेआउट फ़ाइल में ऐसा कुछ हो सकता है:

<TextView
    android:id="@+id/text_release_date"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:padding="2dp"
    android:text="@{@string/myDateFormat(vm.releaseDate)}"
    tools:text="0000"
    />

और जावा वर्ग में:

    MovieDetailViewModel vm = new MovieDetailViewModel();
    vm.setReleaseDate(new Date());

0

एंड्रॉइड टाइम क्लास 3 प्रारूपण विधियां प्रदान करता है http://developer.android.com/reference/android/text/format/Time.html

मैंने इस तरह से इसे किया:

/**
* This method will format the data from the android Time class (eg. myTime.setToNow())   into the format
* Date: dd.mm.yy Time: hh.mm.ss
*/
private String formatTime(String time)
{
    String fullTime= "";
    String[] sa = new String[2];

    if(time.length()>1)
    {
        Time t = new Time(Time.getCurrentTimezone());
        t.parse(time);
        // or t.setToNow();
        String formattedTime = t.format("%d.%m.%Y %H.%M.%S");
        int x = 0;

        for(String s : formattedTime.split("\\s",2))
        {   
            System.out.println("Value = " + s);
            sa[x] = s;
            x++;
        }
        fullTime = "Date: " + sa[0] + " Time: " + sa[1];
    }
    else{
        fullTime = "No time data";
    }
    return fullTime;
}

मुझे आशा है कि मददगार :-)


0

बहुत देर हो चुकी है लेकिन यह किसी की मदद कर सकता है

DateFormat.format(format, timeInMillis);

यहाँ formatक्या प्रारूप आप की जरूरत है

ex: "HH: mm" 15:30 देता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.