2010-10-25 19 views
13

मुझे ग्रेगोरियन कैलेंडर ऑब्जेक्ट को यूनिक्स समय में परिवर्तित करने के लिए एक विधि की आवश्यकता है (यानी एक लंबा)। यूनिक्स टाइम (लम्बाई) को ग्रेगोरियन कैलेंडर ऑब्जेक्ट में कनवर्ट करने के लिए एक विधि की भी आवश्यकता है। क्या वहां कोई तरीका है जो ऐसा करता है? यदि नहीं, तो मैं इसे कैसे कर सकता हूं? किसी भी मदद को बहुत सराहा जाएगा।जावा में ग्रेगोरियन कैलेंडर से यूनिक्स टाइम में मैं कैसे परिवर्तित कर सकता हूं?

ग्रेगोरी कैलेंडर क्लास के लिए लिंक ->http://download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html

धन्यवाद।

उत्तर

26

तरीकों getTimeInMillis() और setTimeInMillis(long) आप मिलता है और मिलीसेकेंड में समय है, जो यूनिक्स समय 1000 से गुणा आप मैन्युअल रूप से समायोजित करने के लिए के बाद से यूनिक्स समय मिलीसेकंड शामिल नहीं है होगा निर्धारित करने देगा।

 
long unixTime = gregCal.getTimeInMillis()/1000; 
gregCal.setTimeInMillis(unixTime * 1000); 

एक तरफ: आप अपने आवेदन में दिनांक एक बहुत का उपयोग करते हैं, खासकर यदि आप दिनांक परिवर्तित करने या एक से अधिक समय क्षेत्रों का उपयोग कर रहे हैं, मैं अत्यधिक JodaTime लाइब्रेरी का उपयोग कर की सिफारिश करेंगे। जावा के साथ आने वाले कैलेंडर सिस्टम की तुलना में यह बहुत पूर्ण और काफी स्वाभाविक है।

+0

+1 जोडा समय –

+0

हे धन्यवाद। मुझे बस आपके द्वारा लिखे गए कोड की आवश्यकता है। आपका बहुत बहुत धन्यवाद! – androidNoob

+0

चूंकि यूनिक्स समय में मिलीसेकंड नहीं था? – Pacerier

0

Calendar.getTimeInMillis() आप जो खोज रहे हैं होना चाहिए। केवल कुछ सेकंड -

0

tl; डॉ

myGregCal.toZonedDateTime().toEpochSecond()      // Convert from troublesome legacy `GregorianCalendar` to modern `ZonedDateTime`. 

और दूसरी दिशा जा रहा ...

GregorianCalendar.from(          // Convert from modern `ZonedDateTime` to troublesome legacy class `GregorianCalendar`. 
    Instant.ofEpochSecond(yourCountOfWholeSecondsSinceEpoch) // Moment in UTC. 
     .atZone(            // Apply `ZoneId` to `Instant` to produce a `ZonedDateTime` object. 
      ZoneId.of("Africa/Tunis") 
     ) 
)                

बचें विरासत तिथि-समय वर्गों

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

तो यहाँ बदलने और आधुनिक उपयोग करने के लिए कैसे है आपकी समस्या के लिए कक्षाएं। आधुनिक वर्ग ZonedDateTime को विरासत वर्ग GregorianCalendar से

java.time

परिवर्तित करते हैं। पुराने वर्गों में जोड़े गए नए तरीकों को कॉल करें।

ZonedDateTime zdt = myGregCal.toZonedDateTime() ; 

और दूसरी दिशा जा रहा ...

GregorianCalendar myGregCal = GregorianCalendar.from(zdt) ; 

“Unix time” द्वारा आप यूटीसी में 1970 के पहले पल की epoch reference के बाद से पूरे सेकंड की गिनती के लिए होती हैं, 1970-01-01T00: 00: 00Z , फिर toEpochSecond पर कॉल करें।

long secondsSinceEpoch = zdt.toEpochSecond() ; 

आप मिलीसेकेंड की गिनती की है तो 1970 के बाद से यूटीसी में शुरू किया था, तो एक Instant निकालें। Instant कक्षा UTC में nanoseconds (दशमलव अंश के नौ (9) अंकों के संकल्प के साथ समयरेखा पर एक पल का प्रतिनिधित्व करती है)।

Instant instant = zdt.toInstant() ; 

अब ask for the count of milliseconds

long millisecondsSinceEpoch = instant.toEpochMill() ; 

ध्यान रखें कि या तो पूरा सेकंड या milliseconds डेटा हानि शामिल हो सकता है के लिए पूछ रहा। ZonedDateTime और Instant दोनों नैनोसेकंड को हल करते हैं। इसलिए कोई भी microseconds या मौजूद नैनोसेकंड को अनदेखा कर दिया जाएगा क्योंकि आप अपने पूरे सेकंड या मिलीसेकंड को गिनते हैं।


बारे java.time

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

Joda-Time प्रोजेक्ट, अब maintenance mode में, java.time कक्षाओं में माइग्रेशन की सलाह देता है।

और जानने के लिए, Oracle Tutorial देखें। और कई उदाहरणों और स्पष्टीकरणों के लिए स्टैक ओवरफ़्लो खोजें। विशिष्टता JSR 310 है।

एक JDBC driver अनुरूप JDBC 4.2 साथ या बाद में उपयोग करके आप अपने डाटाबेस के साथ java.time वस्तुओं सीधे का आदान-प्रदान कर सकते हैं। तारों की कोई ज़रूरत नहीं है और न ही java.sql। * कक्षाएं।

जावा.टाइम कक्षाएं कहां प्राप्त करें?

  • Java SE 8, Java SE 9, और बाद में
    • में निर्मित।
    • एक बंडल कार्यान्वयन के साथ मानक जावा एपीआई का हिस्सा।
    • जावा 9 कुछ मामूली विशेषताओं और सुधारों को जोड़ता है।
  • Java SE 6 और Java SE 7
    • java.time कार्यक्षमता की ज्यादातर ThreeTen-Backport में जावा 6 & से 7 वापस भेजा गया है।
  • Android
    • java.time वर्गों के एंड्रॉयड बंडल कार्यान्वयन के बाद के संस्करण।
    • पहले एंड्रॉइड के लिए, ThreeTenABP प्रोजेक्ट थ्रीटेन-बैकपोर्ट (ऊपर उल्लिखित) का अनुकूलन करता है। How to use ThreeTenABP… देखें।

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

संबंधित मुद्दे

 संबंधित मुद्दे