जावा में स्ट्रिंग प्रारूप में वर्तमान टाइमस्टैम्प कैसे प्राप्त करें? "Yyyy.MM.dd.HH.mm.ss"


174

जावा में स्ट्रिंग प्रारूप में टाइमस्टैम्प कैसे प्राप्त करें? "Yyyy.MM.dd.HH.mm.ss"

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Timestamp());

यह मेरे पास है, लेकिन टाइमस्टैम्प () के लिए एक पैरामीटर की आवश्यकता होती है ...


readyStatement.setTimestamp (1, नया टाइमस्टैम्प (System.currentTimeMillis ()));
रजत

आप क्या त्रुटि प्राप्त कर रहे हैं?
रॉबर्ट कोलंबिया

FYI करें, बहुत पुरानी पुरानी समय-समय की कक्षाएं जैसे कि SimpleDateFormatऔर java.sql.Timestampअब विरासत है , जावा 8 और बाद में निर्मित java.time कक्षाओं द्वारा ली गई है । ओरेकल द्वारा ट्यूटोरियल देखें ।
बेसिल बोर्के

जवाबों:


202

बदलने के

new Timestamp();

साथ में

new java.util.Date()

क्योंकि कोई डिफ़ॉल्ट निर्माता नहीं है Timestamp, या आप इसे विधि से कर सकते हैं:

new Timestamp(System.currentTimeMillis());

5
FYI करें, बहुत पुरानी पुरानी समय-समय की कक्षाएं जैसे कि java.util.Dateऔर java.sql.Timestampअब विरासत है , जावा 8 और बाद में निर्मित java.time कक्षाओं द्वारा ली गई है । ओरेकल द्वारा ट्यूटोरियल देखें ।
बेसिल बोर्के

160

java.util.Dateटाइमस्टैम्प के बजाय कक्षा का उपयोग करें ।

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

यह आपको निर्दिष्ट प्रारूप में वर्तमान तिथि प्राप्त करेगा।


5
इससे मुझे मदद मिली और मैंने कुछ बदलाव किए ताकि मुझे आयात न करना new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
पड़े

बेहतर new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date());
जोन

36

tl; डॉ

केवल आधुनिक java.time कक्षाओं का उपयोग करें । कभी इस तरह के रूप भयानक विरासत वर्गों का उपयोग SimpleDateFormat, Dateया java.sql.Timestamp

ZonedDateTime                    // Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone).
.now(                            // Capture the current moment.
    ZoneId.of( "Africa/Tunis" )  // Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST. 
)                                // Returns a `ZonedDateTime` object. 
.format(                         // Generate a `String` object containing text representing the value of our date-time object. 
    DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" )
)                                // Returns a `String`. 

या JVM के वर्तमान डिफ़ॉल्ट समय क्षेत्र का उपयोग करें।

ZonedDateTime
.now( ZoneId.systemDefault() )
.format( DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" ) )

java.time और JDBC 4.2

आधुनिक दृष्टिकोण java.time कक्षाओं का उपयोग करता है जैसा कि ऊपर देखा गया है।

यदि आपका JDBC ड्राइवर JDBC 4.2 के साथ अनुपालन करता है , तो आप डेटाबेस के साथ java.time ऑब्जेक्ट को सीधे एक्सचेंज कर सकते हैं । का उपयोग करें PreparedStatement::setObjectऔर ResultSet::getObject

केवल JDBC 4.2 से पहले ड्राइवरों के लिए java.sql का उपयोग करें

यदि आपका JDBC ड्राइवर java.time प्रकारों के समर्थन के लिए JDBC 4.2 का अनुपालन नहीं करता है , तो आपको java.sql वर्गों का उपयोग करने के लिए वापस गिरना होगा।

आकड़ो का भंडारण किया जा रहा हैं।

OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;  // Capture the current moment in UTC.
myPreparedStatement.setObject(  , odt ) ;

डाटा लिया जा रहा है।

OffsetDateTime odt = myResultSet.getObject(  , OffsetDateTime.class ) ;

Java.sql प्रकार, जैसे java.sql.Timestamp, का उपयोग केवल डेटाबेस के अंदर और बाहर हस्तांतरण के लिए किया जाना चाहिए। जावा 8 और बाद में java.time प्रकारों में तुरंत रूपांतरित करें।

java.time.Instant

यूटीसी में समय पर एक java.sql.Timestampनक्शे java.time.Instant, एक पल। toInstantपुराने वर्ग में जोड़े गए नए रूपांतरण विधि को नोट करें ।

java.sql.Timestamp ts = myResultSet.getTimestamp(  );
Instant instant = ts.toInstant(); 

समय क्षेत्र

ZoneIdएक पाने के लिए वांछित / अपेक्षित समय क्षेत्र ( ) लागू करें ZonedDateTime

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

स्वरूपित स्ट्रिंग्स

DateTimeFormatterअपनी स्ट्रिंग उत्पन्न करने के लिए a का उपयोग करें । पैटर्न कोड समान हैं, java.text.SimpleDateFormatलेकिन बिल्कुल नहीं, इसलिए डॉक्टर को ध्यान से पढ़ें।

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" );
String output = zdt.format( formatter );

यह विशेष रूप से सटीक अर्थ के रूप में अस्पष्ट है क्योंकि इसमें ऑफसेट-यूटीसी या समय क्षेत्र के किसी भी संकेत का अभाव है ।

आईएसओ 8601

यदि आपके पास इस मामले में कोई भी बात है, तो मेरा सुझाव है कि आप स्वयं को रोल करने के बजाय मानक आईएसओ 8601 प्रारूपों का उपयोग करने पर विचार करें। मानक प्रारूप आपके लिए काफी समान है। उदाहरण के लिए
2016-02-20T03:26:32+05:30:।

Java.time कक्षाएं डिफ़ॉल्ट रूप से इन मानक प्रारूपों का उपयोग करती हैं, इसलिए किसी पैटर्न को निर्दिष्ट करने की आवश्यकता नहीं है। ZonedDateTimeवर्ग समय क्षेत्र का नाम (एक बुद्धिमान सुधार) जोड़कर मानक प्रारूप फैली हुई है।

String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]

Java.sql में परिवर्तित करें

आप java.time से वापस में परिवर्तित कर सकते हैं java.sql.Timestamp। एक उद्धरण Instantसे ZonedDateTime

Java.time कक्षाओं को / से परिवर्तित करने की सुविधा के लिए पुरानी कक्षाओं में नए तरीके जोड़े गए हैं।

java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );

जावा में दिनांक-समय प्रकार की तालिका (दोनों विरासत और आधुनिक) और मानक एसक्यूएल में


जावा के बारे में

Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date, Calendar, और SimpleDateFormat

Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।

अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है

आप अपने डेटाबेस से सीधे java.time वस्तुओं का आदान-प्रदान कर सकते हैं । JDBC 4.2 या उसके बाद के JDBC ड्राइवर का अनुपालन करें । तारों की कोई जरूरत नहीं, कक्षाओं की कोई जरूरत नहीं ।java.sql.*

Java.time कक्षाएं कहाँ से प्राप्त करें?

ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval, YearWeek, YearQuarter, और अधिक


तो वर्तमान दीवार घड़ी का समय स्टैम्प "yyyy.MM.dd.HH.mm.ss" प्राप्त करने का सही तरीका क्या है? स्पष्ट रूप से मेरे स्थानीय समय क्षेत्र के हार्ड-कोडेड स्ट्रिंग को निर्दिष्ट किए बिना? यही विषय स्टार्टर पूछ रहा था, और मैं आपके जवाब में नहीं मिला ...
t7ko

@ t7ko मैंने tl के लिए उदाहरण कोड की एक पंक्ति जोड़ी , जिसमें JVM के वर्तमान डिफ़ॉल्ट समय क्षेत्र के लिए स्पष्ट रूप से पूछने का तरीका दिखाया गया। बिना किसी दलील के `अब () को कॉल करना समान है लेकिन यह स्पष्ट नहीं है कि क्या आप डिफ़ॉल्ट का उपयोग करना चाहते हैं या यदि आप अनभिज्ञ थे या समय क्षेत्र के महत्वपूर्ण मुद्दे के बारे में भूल गए थे।
तुलसी बॉर्क

32

आप टाइमस्टैम्प के बजाय java.util.Date का उपयोग कर सकते हैं:

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new Date());

6

एक अधिक उपयुक्त दृष्टिकोण है कि निर्माण में एक पैरामीटर के रूप में एक लोकेल क्षेत्र निर्दिष्ट करें। नीचे दिए गए उदाहरण में अमेरिकी लोकेल क्षेत्र का उपयोग किया गया है। दिनांक स्वरूपण स्थानीय-संवेदनशील है और उपयोगकर्ता के क्षेत्र लोकेल (जावा प्लेटफ़ॉर्म SE 7) के रीति-रिवाजों के सापेक्ष लोकेल टू टेलर सूचना का उपयोग करता है।

String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss", Locale.US).format(new Date());

1
"लोकेल ज़ोन" जैसी कोई चीज़ नहीं। मुझे संदेह है कि आपके भ्रम Localeऔर समय क्षेत्र असंबंधित हैं। Localeप्रारूपण और महीने / दिन के नाम के लिए उपयोग की जाने वाली मानव भाषा के लिए सांस्कृतिक मानदंडों को नियंत्रित करता है। समय क्षेत्र कुछ क्षेत्र की दीवार-घड़ी के समय के लिए उपयुक्त होने के लिए दिनांक-समय प्रतिनिधित्व को समायोजित करता है । इस प्रश्न के मामले में, लोकेल अप्रासंगिक है क्योंकि कोई भी प्रारूपण मुद्दे नहीं हैं जिनके साथ सांस्कृतिक मानदंडों को लागू करना है और न ही किसी विशेष मानव भाषा को स्थानीय बनाने के लिए महीने / दिन का कोई नाम है।
तुलसी बोर्क

@BasilBourque आपके इनपुट के लिए धन्यवाद। मैंने उत्तर को और अधिक स्पष्ट करने के लिए अपडेट किया है
user3144836

4

आप निम्नलिखित का उपयोग कर सकते हैं

new java.sql.Timestamp(System.currentTimeMillis()).getTime()

Result : 1539594988651

आशा है कि यह मदद करेगा। सिर्फ मेरे सुझाव और इनाम अंक के लिए नहीं।


यह स्ट्रिंग प्रारूप के लिए कहा नहीं है। इसके अलावा, मुझे डर है कि इसी तरह के जवाबों के एक जोड़े को जोड़ने वाली एकमात्र चीज़, अनावश्यक जटिलता है ...
ओले वीवी

4

java.timeयदि आप जावा 8 या नए का उपयोग करते हैं तो आधुनिक कक्षाओं का उपयोग करें ।

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

बेसिल बॉर्क का जवाब बहुत अच्छा है। लेकिन यह बहुत लंबा है। बहुत से लोगों को इसे पढ़ने का कोई धैर्य नहीं होता। शीर्ष 3 उत्तर बहुत पुराने हैं और जावा नए मधुमक्खी को भ्रमित कर सकते हैं। इसलिए मैं नए आने वाले देवों के लिए यह संक्षिप्त और आधुनिक उत्तर प्रदान करता हूं। आशा है कि यह उत्तर भयानक उपयोग को कम कर सकता है SimpleDateFormat

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