YYYY-MM-DD HH: MI: Sec.Millisecond स्वरूप जावा में वर्तमान समय कैसे प्राप्त करें?


641

नीचे दिया गया कोड मुझे वर्तमान समय देता है। लेकिन यह मिलीसेकंड के बारे में कुछ नहीं बताता है।

public static String getCurrentTimeStamp() {
    SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy
    Date now = new Date();
    String strDate = sdfDate.format(now);
    return strDate;
}

मुझे प्रारूप में तारीख मिलती है 2009-09-22 16:47:08 (YYYY-MM-DD HH: MI: Sec)

लेकिन मैं प्रारूप में वर्तमान समय को पुनः प्राप्त करना चाहता हूं 2009-09-22 16:47:08.128 ((YYYY-MM-DD HH: MI: Sec.Ms) - जहां 128 मिलीसेकंड बताता है।

SimpleTextFormatठीक काम करेगा। यहाँ समय की सबसे कम इकाई दूसरी है, लेकिन मुझे मिलीसेकंड भी कैसे मिलेगा?


32
जब बाकी सब विफल हो जाए, तो दस्तावेज़ीकरण पढ़ें ।
हॉट लिक्स

4
FYI करें, जैसे परेशानी पुराने तिथि-समय कक्षाएं java.util.Date, java.util.Calendarऔर java.text.SimpleTextFormatअब कर रहे हैं विरासत , द्वारा का स्थान ले लिया java.time कक्षाएं। ओरेकल द्वारा ट्यूटोरियल देखें ।
बेसिल बॉर्क

जवाबों:


1003
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

जिज्ञासा से बाहर, सिंपलडेटफार्मेट का उपयोग करने से क्या लाभ होता है: बस डेटाइम। टीस्ट्रीमिंग ("yyyy-MM-dd HH: mm: ss.SSS")?
NickG

10
@NickG यह toString(String format)तरीका कहाँ है ? ऐसा java.util.Dateलगता नहीं है। क्या आप Joda Time API का जिक्र कर रहे हैं? लेकिन एक संभावित लाभ उसी फॉर्मेट ऑब्जेक्ट का पुन: उपयोग है। एक और आप एक एपीआई जोड़ने की जरूरत नहीं है - दिनांक वर्ग एक मानक जावा पुस्तकालय वर्ग है।
ADTC

22
Java 8 में आप उसी उद्देश्य के लिए DateTimeFormatter का उपयोग कर सकते हैं ।
विटाली फेडोरेंको

7
SimpleDateFormat थ्रेड सुरक्षित नहीं है, लेकिन नया DateTimeFormatter थ्रेड सुरक्षित है।
देवदंके २५'१

15
जावा 8 LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"))
डेटाइम

202

एक जावा एक लाइनर

public String getCurrentTimeStamp() {
    return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
}

JDK8 शैली में

public String getCurrentLocalDateTimeStamp() {
    return LocalDateTime.now()
       .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
}

9
LocalDateTime और DateTimeFormatter, SimpleDateFormat के विपरीत थ्रेड-सुरक्षित हैं
Maxple

@ कोई भी मामला जहां SimpleDateFormat मुद्दों का कारण?
गौरव

1
@ गौरव यहां आपकी कुकी है: callicoder.com/java-simpedateformat-thread-safety-issues
kidnan1991



30

tl; डॉ

Instant.now()
       .toString()

2016-05-06T23: 24: 25.694Z

ZonedDateTime
.now
( 
    ZoneId.of( "America/Montreal" ) 
)
.format(  DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " )

2016-05-06 19: 24: 25.694

java.time

जावा 8 में और बाद में, हमारे पास java.time ढांचे जावा 8 और बाद में बनाया गया। ये नई कक्षाएं पुरानी पुरानी java.util.Date/.Calendar क्लासेस को दबा देती हैं। नई कक्षाएं अत्यधिक सफल जोडा-टाइम फ्रेमवर्क से प्रेरित हैं , जिसका उद्देश्य इसके उत्तराधिकारी के रूप में है, जो अवधारणा में समान है, लेकिन फिर से वास्तुकला में है। JSR 310 द्वारा परिभाषित । थ्रीटेन-एक्स्ट्रा प्रोजेक्ट द्वारा विस्तारित । ट्यूटोरियल देखें

ज्ञात हो कि java.time नैनोसेकंड रिज़ॉल्यूशन (9 डिग्री सेकंड के अंश में 9 दशमलव स्थान) में सक्षम है, बनाम मिलीसेकंड दोनों java.util.Date & Joda-Time रिज़ॉल्यूशन (3 दशमलव स्थानों) में सक्षम है। इसलिए जब केवल 3 दशमलव स्थानों को प्रदर्शित करने के लिए प्रारूपण किया जाता है, तो आप डेटा छिपा सकते हैं।

यदि आप अपने डेटा से किसी भी माइक्रोसेकंड या नैनोसेकंड को खत्म करना चाहते हैं, तो काटें।

Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;

Java.time क्लासेस डिफ़ॉल्ट रूप से आईएसओ 8601 फॉर्मेट का उपयोग तब करती हैं जब स्ट्रिंग / पार्सिंग उत्पन्न करती हैं। Zअंत में ए के लिए कम है Zulu, और इसका मतलब है यूटीसी

एक Instantयूटीसी में समय रेखा पर एक क्षण का प्रतिनिधित्व करता है जिसमें नैनोसेकंड तक का संकल्प होता है । जावा 8 में वर्तमान क्षण को कैप्चर करना मिलीसेकंड तक सीमित है , जावा 9 में एक नए कार्यान्वयन के साथ आपके कंप्यूटर की हार्डवेयर घड़ी की क्षमताओं के आधार पर नैनोसेकंड्स पर कब्जा कर रहा है।

Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();

2016-05-06T23: 24: 25.694Z

अपने वांछित आउटपुट प्राप्त करने के लिए Tबीच में एक जगह, और Zकुछ भी नहीं के साथ बदलें ।

String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course.

2016-05-06 23: 24: 25.694

जैसा कि आप ऑफ़सेट या टाइम ज़ोन सहित परवाह नहीं करते हैं, किसी विशेष इलाके के लिए "स्थानीय" तिथि-समय असंबंधित करें।

String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );

Joda समय

बेहद सफल जोदा-टाइम लाइब्रेरी java.time फ्रेमवर्क की प्रेरणा थी। सुविधाजनक होने पर java.time पर माइग्रेट करने की सलाह दी जाती है।

आईएसओ 8601 प्रारूप मिलीसेकेंड शामिल है, और के लिए डिफ़ॉल्ट है Joda समय 2.4 पुस्तकालय।

System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );

जब चला…

Now: 2013-11-26T20:25:12.014Z

इसके अलावा, यदि आवश्यक हो, तो आप एक नंबर के रूप में मिलिसेकंड के कुछ अंशों के लिए पूछ सकते हैं:

int millisOfSecond = myDateTime.getMillisOfSecond ();

9

सबसे आसान तरीका था (जावा 8 से पहले),

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

लेकिन SimpleDateFormat थ्रेड-सुरक्षित नहीं है। न तो java.util.Date । यह उपयोगकर्ताओं के लिए संभावित समसामयिक मुद्दों की ओर ले जाएगा। और उन मौजूदा डिजाइनों में कई समस्याएं हैं। जावा 8 में अब इन पर काबू पाने के लिए हमारे पास java.time नामक एक अलग पैकेज है । यह जावा एसई 8 दिनांक और समय दस्तावेज़ में इसके बारे में एक अच्छा अवलोकन है।

तो जावा 8 में कुछ इस तरह नीचे दिया जाएगा (वर्तमान तिथि / समय को प्रारूपित करने के लिए),

LocalDateTime.now()
   .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));

और ध्यान देने वाली बात यह है कि यह लोकप्रिय थर्ड पार्टी लाइब्रेरी जॉडा-टाइम की मदद से विकसित किया गया था ,

जेएसआर 310 के तहत परियोजना का नेतृत्व जॉडा-टाइम (स्टीफन कोलबोर्न) और ओरेकल के लेखक द्वारा संयुक्त रूप से किया गया है, और यह नए जावा एसई 8 पैकेज java.time में दिखाई देगा।

लेकिन अब यह कम joda-timeहोता जा रहा है और उपयोगकर्ताओं को नए में स्थानांतरित करने के लिए कहा है java.time

ध्यान दें कि जावा एसई 8 के बाद से, उपयोगकर्ताओं को java.time (JSR-310) पर माइग्रेट करने के लिए कहा जाता है - JDK का एक मुख्य भाग जो इस परियोजना की जगह लेता है

वैसे भी कहा जा रहा है कि,

यदि आपके पास एक कैलेंडर उदाहरण है, तो आप इसे नए में बदलने के लिए नीचे का उपयोग कर सकते हैं java.time,

    Calendar calendar = Calendar.getInstance();
    long longValue = calendar.getTimeInMillis();         

    LocalDateTime date =
            LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());
    String formattedString = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));

    System.out.println(date.toString()); // 2018-03-06T15:56:53.634
    System.out.println(formattedString); // 2018-03-06 15:56:53.634

यदि आपके पास दिनांक वस्तु थी,

    Date date = new Date();
    long longValue2 = date.getTime();

    LocalDateTime dateTime =
            LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue2), ZoneId.systemDefault());
    String formattedString = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));

    System.out.println(dateTime.toString()); // 2018-03-06T15:59:30.278
    System.out.println(formattedString);     // 2018-03-06 15:59:30.278

यदि आप सिर्फ युग मिलिसेकंड थे,

LocalDateTime date =
        LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault());

न्यूनतम एपीआई स्तर 26 है
AbhinayMe

8

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

String.format("%tF %<tT.%<tL", dateTime);

चर dateTimeकिसी भी तारीख और / या समय मूल्य हो सकता है, के लिए JavaDocFormatter देखें ।


4

उपर्युक्त उत्तरों के पूरक के लिए, यहाँ एक कार्यक्रम का एक छोटा सा कार्य उदाहरण दिया गया है, जो वर्तमान समय और तिथि को, मिलीसेकंड सहित, को मुद्रित करता है।

import java.text.SimpleDateFormat;
import java.util.Date;

public class test {
    public static void main(String argv[]){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        Date now = new Date();
        String strDate = sdf.format(now);
        System.out.println(strDate);
    }
}


2

निर्दिष्ट प्रारूप में अपना वर्तमान समय पाने के लिए इसका उपयोग करें :

 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 System.out.print(dateFormat.format(System.currentTimeMillis()));  }

FYI करें, इस तरह के रूप में बहुत परेशानी पुराने तिथि-समय कक्षाएं java.util.Date, java.util.Calendarऔर java.text.SimpleDateFormatअब कर रहे हैं विरासत , द्वारा का स्थान ले लिया java.time जावा 8 और बाद में बनाया गया वर्गों। ओरेकल द्वारा ट्यूटोरियल देखें ।
बेसिल बॉर्क

वास्तव में मैं एंड्रॉइड ऐप के लिए इस समाधान का उपयोग कर रहा था, लेकिन एंड्रॉइड में जावा.टाइम क्लास का उपयोग करने के लिए हमें कम से कम 27 पर एपीआई सेट करना होगा। वैसे भी जानकारी साझा करने के लिए धन्यवाद।
अभिषेक सेनगुप्ता

लगभग सभी java.time कार्यक्षमता को लगभग उसी एपीआई के साथ थ्रीटेन-बैकपोर्ट परियोजना में जावा 6 और 7 में वापस पोर्ट किया गया है। इसके बाद थ्रीटेबैप प्रोजेक्ट में एंड्रॉइड <26 को अनुकूलित किया गया । इसलिए उन खूनी भयानक पुरानी तिथि-समय की कक्षाओं को फिर से छूने का कोई कारण नहीं है।
बेसिल बोर्क

2

मेरे पास मिलिसकॉन्ड के साथ दिनांक और समय प्रदर्शित करने के लिए एक सरल उदाहरण है ......

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class MyClass{

    public static void main(String[]args){
        LocalDateTime myObj = LocalDateTime.now();
        DateTimeFormatter myFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS);
        String forDate = myObj.format(myFormat);
        System.out.println("The Date and Time are: " + forDate);
    }
}

अच्छा लग रहा है, लेकिन क्या यह कहना है कि रायसिंह की 5 साल पुरानी टिप्पणी पर क्या कहना है ?
greybeard




0

java.text (जावा 8 से पहले)

public static ThreadLocal<DateFormat> dateFormat = new ThreadLocal<DateFormat>() {
    protected DateFormat initialValue() {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    };
};

...
dateFormat.get().format(new Date());

java.time

public static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");

...
dateTimeFormatter.format(LocalDateTime.now());

-1

आप बस इसे अपने इच्छित प्रारूप में प्राप्त कर सकते हैं।

String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.