Android वर्तमान टाइमस्टैम्प प्राप्त करें?


248

मैं उस तरह का मौजूदा टाइमस्टैम्प प्राप्त करना चाहता हूं: 1320917972

int time = (int) (System.currentTimeMillis());
Timestamp tsTemp = new Timestamp(time);
String ts =  tsTemp.toString();

2
FYI करें, जैसे परेशानी पुराने तिथि-समय कक्षाएं java.util.Date, java.util.Calendarऔर Timestampअब कर रहे हैं विरासत, द्वारा का स्थान ले लिया java.time कक्षाएं। जावा- टाइम की अधिकांश कार्यक्षमता थ्री-बैक-बैकपोर्ट परियोजना में जावा 6 और जावा 7 में बैक-पोर्ट की गई है। इसके अलावा तीनटैनबप प्रोजेक्ट में पहले के एंड्रॉइड के लिए अनुकूलित । देखें कि थ्रीटेनाब का उपयोग कैसे करें…
बेसिल बोर्क

जवाबों:


299

समाधान है:

Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();

यह डिवाइस के टाइमज़ोन ऑफसेट में कारक नहीं है।
kjdion84

1
@ kjdion84 मुझे माफ करना, लेकिन आपको क्यों लगता है कि यह महत्वपूर्ण होगा? बस सवाल पर आधारित है।
ԃ

82

डेवलपर्स ब्लॉग से:

System.currentTimeMillis()मानक "दीवार" घड़ी (समय और तारीख) युग के बाद से मिलीसेकंड व्यक्त कर रहा है। दीवार घड़ी को उपयोगकर्ता या फोन नेटवर्क द्वारा सेट किया जा सकता है (देखें सेटक्रांति टाइममिल (लंबी) ), इसलिए समय पीछे की तरफ या अप्रत्याशित रूप से कूद सकता है। इस घड़ी का उपयोग केवल तब किया जाना चाहिए जब वास्तविक दुनिया की तारीखों और समय के साथ पत्राचार महत्वपूर्ण हो, जैसे कि कैलेंडर या अलार्म घड़ी के अनुप्रयोग में। अंतराल या बीता समय माप को एक अलग घड़ी का उपयोग करना चाहिए। आप उपयोग कर रहे हैं System.currentTimeMillis(), को सुनने पर विचार करें ACTION_TIME_TICK, ACTION_TIME_CHANGEDऔर ACTION_TIMEZONE_CHANGEDउद्देश्य प्रसारण पता लगाने के लिए जब समय बदल जाता है।


11
से developer.android.com/reference/java/lang/... मैंने पाया कि System.nanoTime()लिए एक विकल्प है System.currentTimeMillis()और यह कोई अप्रत्याशित उतार चढ़ाव है, और अवधि अंतर को मापने के लिए बनाया गया है।
बियांका डेनिक्यूक

2
@ ana01 "शून्य मान आमतौर पर जब भी डिवाइस अंतिम रूप से बूट होता है" - तो इसका उपयोग केवल तभी किया जा सकता है जब आप उसी डिवाइस पर अवधि अंतर की तुलना करते हैं। उदाहरण के लिए डेटाबेस भंडारण के लिए उपयोगी नहीं है।
मिशैल के

1
@ Ana01 की टिप्पणी के लिए बस एक नोट जो System.nanoTime()दीवार घड़ी के समय को प्रदर्शित करने के लिए उपयुक्त नहीं है। उस उद्देश्य के लिए, System.currentTimeMillis()इसके बजाय का उपयोग करें ।
आकाश अग्रवाल

33

1320917972 1 जनवरी, 1970 को 00:00:00 UTC के बाद से सेकंड की संख्या का उपयोग करते हुए यूनिक्स टाइमस्टैम्प है। आप TimeUnitइकाई रूपांतरण के लिए कक्षा का उपयोग कर सकते हैं - System.currentTimeMillis()सेकंड से।

String timeStamp = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));

29

आप SimpleDateFormat वर्ग का उपयोग कर सकते हैं :

SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
String format = s.format(new Date());

22
यह टाइमस्टैम्प नहीं है (काल के बाद का समय)
मिशैल के

1
टाइमस्टैम्प नहीं है, और इसके अलावा, बिल्कुल भी प्रभावशाली नहीं है (सिंपलडाइटफार्मेट का निर्माण, तारीख का निर्माण, रूपांतरण)। इससे बचो।
सीनोरथ जूल

आप sth का जवाब दे रहे हैं, लेकिन यह भी मान्य है।
जूल

24

वर्तमान समय की मोहर पाने के लिए नीचे दी गई विधि का उपयोग करें। यह मेरे लिए ठीक काम करता है।

/**
 * 
 * @return yyyy-MM-dd HH:mm:ss formate date as string
 */
public static String getCurrentTimeStamp(){
    try {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String currentDateTime = dateFormat.format(new Date()); // Find todays date

        return currentDateTime;
    } catch (Exception e) {
        e.printStackTrace();

        return null;
    }
}

37
वह टाइमस्टैम्प नहीं है।

1
@ हिट्स, यह सरल दिनांक स्वरूप है, टाइमस्टैम्प नहीं। आप वर्तमान समय में चर नाम का उपयोग कर रहे हैं।
जूल

12

यह सरल उपयोग है:

long millis = new Date().getTime();

यदि आप इसे विशेष प्रारूप में चाहते हैं तो आपको नीचे दिए गए फ़ॉर्मेट की आवश्यकता है

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String millisInString  = dateFormat.format(new Date());

8

यहाँ एक मानव-पठनीय समय स्टाम्प है जो एक फ़ाइल नाम में इस्तेमाल किया जा सकता है, बस अगर किसी को उसी चीज की आवश्यकता होती है जो मुझे चाहिए:

package com.example.xyz;

import android.text.format.Time;

/**
 * Clock utility.
 */
public class Clock {

    /**
     * Get current time in human-readable form.
     * @return current time as a string.
     */
    public static String getNow() {
        Time now = new Time();
        now.setToNow();
        String sTime = now.format("%Y_%m_%d %T");
        return sTime;
    }
    /**
     * Get current time in human-readable form without spaces and special characters.
     * The returned value may be used to compose a file name.
     * @return current time as a string.
     */
    public static String getTimeStamp() {
        Time now = new Time();
        now.setToNow();
        String sTime = now.format("%Y_%m_%d_%H_%M_%S");
        return sTime;
    }

}

1
अरे, क्या आप टाइमस्टैम्प की सूची को सॉर्ट करने का सबसे अच्छा तरीका भी बता सकते हैं? मैं खुद उन्हें छांटने की सोच रहा था लेकिन सोचा कि इससे बेहतर तरीका हो सकता है।
अब्बास

इसे पढ़ने वाले किसी भी व्यक्ति के लिए भविष्य में संदर्भ के लिए कि "android.text.format.Time" अब पदावनत किया गया है
jason.kaisersmith

5

इन्हें कोशिश करें

time.setText(String.valueOf(System.currentTimeMillis()));

और टाइमस्टैम्प समय प्रारूप के लिए

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String dateString = formatter.format(new Date(Long.parseLong(time.getText().toString())));
time.setText(dateString);

4

java.time

मुझे आधुनिक उत्तर में योगदान देना चाहिए।

    String ts = String.valueOf(Instant.now().getEpochSecond());
    System.out.println(ts);

अभी चल रहा है जब आउटपुट:

1543320466

जबकि 1000 से विभाजन कई लोगों के लिए एक आश्चर्य के रूप में नहीं आएगा, अपने स्वयं के समय के रूपांतरणों को बहुत तेजी से पढ़ने के लिए कठिन हो सकता है, इसलिए जब आप इससे बच सकते हैं तो यह एक बुरी आदत है।

Instantमैं जिस क्लास का उपयोग कर रहा हूं वह java.time का हिस्सा है, आधुनिक जावा दिनांक और समय एपीआई। यह नए एंड्रॉइड वर्जन, एपीआई स्तर 26 और ऊपर पर अंतर्निहित है। यदि आप पुराने एंड्रॉइड के लिए प्रोग्रामिंग कर रहे हैं, तो आपको बैकपोर्ट मिल सकता है, नीचे देखें। यदि आप ऐसा नहीं करना चाहते हैं, तो जाहिर है, मैं अभी भी एक अंतर्निहित रूपांतरण का उपयोग करूंगा:

    String ts = String.valueOf(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()));
    System.out.println(ts);

यह सीलेकेज द्वारा उत्तर के समान है। आउटपुट पहले जैसा ही है।

प्रश्न: क्या मैं एंड्रॉइड पर java.time का उपयोग कर सकता हूं?

हाँ, java.time पुराने और नए Android उपकरणों पर अच्छी तरह से काम करता है। इसके लिए बस कम से कम जावा 6 की आवश्यकता होती है ।

  • जावा 8 में और बाद में और नए एंड्रॉइड डिवाइसों पर (एपीआई स्तर 26 से) आधुनिक एपीआई बिल्ट-इन आता है।
  • गैर-एंड्रॉइड जावा 6 और 7 में थ्रीटैन बैकपोर्ट मिलता है, नई कक्षाओं का बैकपोर्ट (जेएसआर 310 में थ्रीटेन, नीचे के लिंक देखें)।
  • पर (पुराने) एंड्रॉइड, थ्रीटेन बैकपोर्ट के एंड्रॉइड संस्करण का उपयोग करते हैं। इसे थ्रीटेनबप कहा जाता है। और सुनिश्चित करें कि आप org.threeten.bpसबपेकेज से दिनांक और समय की कक्षाओं का आयात करते हैं ।

लिंक


1
लगभग सही उत्तर (मैंने अपवोट किया) लेकिन, कम से कम मेरी ईमानदार राय में, आपको थ्रीटेन बैकपोर्ट संदर्भ को हटा देना चाहिए क्योंकि यह एंड्रॉइड के बारे में एक सवाल है और सामान्य रूप से जावा के बारे में नहीं। और यह एंड्रॉइड पर शुरुआती लोगों के लिए भ्रमित करने वाला हो सकता है।
स्लोबोदान एंटोनिजेव

1
@ SlobodanAntonijević एंड्रॉइड प्रोग्रामर्स के लिए यह समझना महत्वपूर्ण है कि (ए) यदि वे एंड्रॉइड 26 का समर्थन कर रहे हैं और बाद में, उनके पास java.time बिल्ट-इन, (b) का कार्यान्वयन है यदि 26 से पहले एंड्रॉइड का समर्थन करना है, तो उन्हें एक पुस्तकालय जोड़ना होगा , थ्रीटेनेब पी लाइब्रेरी, और (सी) थ्री टीएएनएबीपी का उपयोग करते हुए , यह जान लें कि यह लाइब्रेरी वास्तव में जावा से एंड्रॉइड के लिए अनुकूलित थ्रीटेन-बैकपोर्ट का अनुकूलन है। ThreeTenABP पुस्तकालय बस के चारों ओर एक एंड्रॉयड विशेष आवरण है ThreeTen-backport पुस्तकालय। इस तालिका ग्राफिक को 3 पुस्तकालयों की तुलना में देखें ।
बासिल बॉर्क

@BasilBourque आप पूरी तरह से सही हैं। लेकिन, आप वास्तव में थ्री टेन-बैकपोर्ट का आयात कर सकते हैं और इसका उपयोग एंड्रॉइड ऐप में कर सकते हैं, लेकिन इसके JAR निर्भरता के प्रदर्शन के कारण बहुत भारी प्रभाव के साथ। यही कारण है कि मैंने कहा है कि पोस्ट अधिक विशिष्ट होनी चाहिए कि एंड्रॉइड देवों को कभी भी थ्रीटेन-बैकपोर्ट का उपयोग नहीं करना चाहिए, और इसके बजाय एपीआई 25 और नीचे के समर्थन के लिए थ्रीटेनबप का उपयोग करें। मैंने कई बोर्ड पर कई देवों को देखा है जो भ्रमित हो जाते हैं जिस पर एंड्रॉइड के लिए उपयोग किया जाना चाहिए, क्योंकि वे नाम से समान ध्वनि करते हैं।
स्लोबोदान एंटोनिजेव

अच्छी बात, @ SlobodanAntonijević। मैंने इसे बस थोड़ा साफ करने की कोशिश की है।
ओले वीवी

1
@ SlobodanAntonijević यह तालिका दिखा रही है कि जावा और एंड्रॉइड दोनों के लिए java.time कहाँ प्राप्त करना है, यह स्पष्ट करने में मदद कर सकता है।
बेसिल बॉर्क

3

कोटलिन में समाधान:

val nowInEpoch = Instant.now().epochSecond

सुनिश्चित करें कि आपका न्यूनतम एसडीके संस्करण 26 है।


0

मैं हिट्स के उत्तर का उपयोग करने का सुझाव देता हूं, लेकिन एक लोकेल प्रारूप जोड़ रहा हूं, यह है कि एंड्रॉइड डेवलपर्स कैसे अनुशंसा करते हैं :

try {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
        return dateFormat.format(new Date()); // Find todays date
    } catch (Exception e) {
        e.printStackTrace();

        return null;
    }

0

यह कोड Kotlin संस्करण है। विचरण युग को समय देने के लिए अंतिम अंक में एक यादृच्छिक फेरबदल पूर्णांक जोड़ने के लिए मेरे पास एक और विचार है।

कोटलिन संस्करण

val randomVariance = (0..100).shuffled().first()
val currentEpoch = (System.currentTimeMilis()/1000) + randomVariance

val deltaEpoch = oldEpoch - currentEpoch

मुझे लगता है कि इस कोड का उपयोग करना बेहतर होगा फिर एंड्रॉइड के संस्करण 26 या अधिक पर निर्भर करेगा

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