2012-08-22 10 views
17

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

int i = (int) new Date().getTime(); 
System.out.println("Integer : " + i); 
System.out.println("Long : "+ new Date().getTime()); 
System.out.println("Long date : " + new Date(new Date().getTime())); 
System.out.println("Int Date : " + new Date(i)); 

उत्पादन इच्छा

Integer : 1292838124 
Long : 1345617601771 
Long date : Wed Aug 22 12:10:01 IST 2012 
Int Date : Fri Jan 16 04:37:18 IST 1970 

किसी भी एक हो जाता है कृपया मेरी मदद करो बाहर, कैसे पूर्णांक के रूप में आज की तारीख में परिवर्तित करने (10 अंकों की संख्या)

+0

ओ/पी है: पूर्णांक: +१२९३६३०५५३, लांग: 1345618394201, लांग तारीख: बुध अगस्त 22 12:23:14 IST 2012, इंट तिथि: शुक्र जनवरी 16 04:50:30 IST 1970 –

+0

मुझे लगता है कि आपने –

+0

में गलत आउटपुट दिया है मेरी गलती के लिए खेद है .. अब मैं इसे बदलता हूं – Bathakarai

उत्तर

30

मुद्दा यह है कि एक पूर्णांक बड़ी नहीं है है वर्तमान तिथि को स्टोर करने के लिए पर्याप्त, आपको एक लंबे समय तक उपयोग करने की आवश्यकता है।

दिनांक 1/1/1970 के बाद से मिलीसेकंड की संख्या के रूप में आंतरिक रूप से संग्रहीत किया जाता है।

अधिकतम पूर्णांक मान, 2147483648 है जबकि 1970 के बाद से मिलीसेकेंड की संख्या

संपादित करें जनवरी 1970 एक तारीख पैदावार सोमवार 26 में अधिकतम पूर्णांक मान लाना 1345618537869

के क्रम में वर्तमान में है: कोड नीचे टिप्पणी के अनुसार 1000 से विभाजन प्रदर्शित करने के लिए:

int i = (int) (new Date().getTime()/1000); 
    System.out.println("Integer : " + i); 
    System.out.println("Long : "+ new Date().getTime()); 
    System.out.println("Long date : " + new Date(new Date().getTime())); 
    System.out.println("Int Date : " + new Date(((long)i)*1000L)); 

Integer : 1345619256 
Long : 1345619256308 
Long date : Wed Aug 22 16:37:36 CST 2012 
Int Date : Wed Aug 22 16:37:36 CST 2012 
+0

धन्यवाद, धन्यवाद, मैं आपका जवाब स्वीकार करता हूं। लेकिन मेरी आवश्यकता केवल पूर्णांक को लंबे समय तक बनाए रखना है .. क्या मेरी आवश्यकता को प्राप्त करने का कोई और तरीका है। – Bathakarai

+6

यदि आप एक सेकंड के संकल्प के साथ रहने के इच्छुक हैं (आप तिथि के मिलीसेकंड घटक खो देंगे) तो आप पूर्णांक को संग्रहीत करने से पहले 1000 तक विभाजित कर सकते हैं। और वापस कन्वर्ट करने के लिए गुणा करें। हालांकि इसमें सीमित जीवन होगा (वाई 2 के मुद्दे का एक प्रकार) - 2038 तक। –

+0

मैंने –

0

आपका समस्या getTime() की वजह से है। यह हमेशा निम्नलिखित लौटता है।

1 जनवरी, 1 9 70 से 00:00:00 GMT इस तिथि ऑब्जेक्ट द्वारा दर्शाए गए मिलीसेकंड की संख्या देता है।

क्योंकि अधिकतम पूर्णांक मान से कम getTime() से वापसी मान यही कारण है कि गलत परिणाम दिखा रहा है।

4

क्या आपको ऐसा कुछ चाहिए (बिना समय के)?

public static Integer toJulianDate(Date pDate) { 
if (pDate == null) { 
    return null; 
} 
Calendar lCal = Calendar.getInstance(); 
lCal.setTime(pDate); 
int lYear = lCal.get(Calendar.YEAR); 
int lMonth = lCal.get(Calendar.MONTH) + 1; 
int lDay = lCal.get(Calendar.DATE); 
int a = (14 - lMonth)/12; 
int y = lYear + 4800 - a; 
int m = lMonth + 12 * a - 3; 
return lDay + (153 * m + 2)/5 + 365 * y + y/4 - y/100 + y/400 - 32045; 
} 
+0

धन्यवाद। आपने मेरी समस्या हल की। – Ponting

+0

@Stefan समाधान के लिए धन्यवाद। लेकिन क्या आप कृपया बता सकते हैं कि यहां क्या हो रहा है। – Droidme

0

मेरी जावा 7 पर, उत्पादन अलग है:

Integer : 1293732698 
Long : 1345618496346 
Long date : Wed Aug 22 10:54:56 MSK 2012 
Int Date : Fri Jan 16 02:22:12 MSK 1970 

जो एक अपेक्षित व्यवहार है।

यह एक पूर्णांक (10 अंकों की संख्या) के रूप में मिलीसेकेंड में वर्तमान दिनांक प्रदर्शित करने के लिए असंभव है क्योंकि नवीनतम संभव तारीख Sun Apr 26 20:46:39 MSK 1970 है:

Date d = new Date(9999_9999_99L); 
System.out.println("Date: " + d); 

Date: Sun Apr 26 20:46:39 MSK 1970 

आप सेकंड/मिनट में यह प्रदर्शित करने पर विचार करना चाहते हो सकता है।

0

शायद आप नहीं कर सकते हैं, लंबे समय से इंटीजर की तुलना में अधिक डेटाटाइप है।

या इस लिंक आप

http://www.velocityreviews.com/forums/t142373-convert-date-to-integer-and-back.html

+0

कृपया अपने उत्तरों में 'हस्ताक्षर' या अपनी वेबसाइट लिंक शामिल न करें। आप उस जानकारी को अपनी प्रोफ़ाइल में डाल सकते हैं। –

6

आदेश में पूर्णांक (10 अंकों की संख्या) के रूप में आज की तारीख पाने के लिए मदद कर सकता है, तो आप विभाजित करने की आवश्यकता लंबे समय से नई तिथि से लौटे()। GetTime() 1000.

यह अंतर सीमा में होगा और 18 जनवरी 2038 तक अच्छा होगा।

2

आप केवल एक पूर्णांक 1 जनवरी, 1970 के बाद से बीते दिनों का प्रतिनिधित्व करने की जरूरत है, तो आप इन की कोशिश कर सकते हैं:

// magic number= 
// millisec * sec * min * hours 
// 1000 * 60 * 60 * 24 = 86400000 
public static final long MAGIC=86400000L; 

public int DateToDays (Date date){ 
    // convert a date to an integer and back again 
    long currentTime=date.getTime(); 
    currentTime=currentTime/MAGIC; 
    return (int) currentTime; 
} 

public Date DaysToDate(int days) { 
    // convert integer back again to a date 
    long currentTime=(long) days*MAGIC; 
    return new Date(currentTime); 
} 

छोटा लेकिन कम पठनीय (थोड़ा तेज?):

public static final long MAGIC=86400000L; 

public int DateToDays (Date date){ 
    return (int) (date.getTime()/MAGIC); 
} 

public Date DaysToDate(int days) { 
    return new Date((long) days*MAGIC); 
} 

आशा इससे मदद मिलती है।

संपादित करें: जब तक शुक्र जुला 11 01:00:00 सीईटी 5881580

-1

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

1

मैं इस समाधान कर लिया है के रूप में नीचे दिखाया गया है:

long year = calendar.get(Calendar.YEAR); 
    long month = calendar.get(Calendar.MONTH) + 1; 
    long day = calendar.get(Calendar.DAY_OF_MONTH); 
    long calcDate = year * 100 + month; 
    calcDate = calcDate * 100 + day; 
    System.out.println("int: " + calcDate); 
+1

यह प्रश्न पहले ही हल हो चुका है, और चूंकि यह 2 साल से अधिक पुराना है, इसलिए ऐसा कोई अन्य उत्तर जोड़ने का कारण नहीं लगता है। – mbomb007

+0

यह उत्तर प्रश्न को संबोधित नहीं करता है। प्रश्न पूछा गया कि 'लंबी' की बजाय 'int' में संख्या को कैसे फ़िट किया जाए। [सही स्वीकृत उत्तर] (http://stackoverflow.com/a/12067775/642706) बताता है कि यह संभव नहीं है। मदद के लिए –

+0

धन्यवाद – user49557

0

tl; डॉ

Instant.now().getEpochSecond() // The number of seconds from the Java epoch of 1970-01-01T00:00:00Z. 

विवरण

दूसरों के रूप में कहा गया है, एक 32-bit पूर्णांक एक नंबर के लिए पर्याप्त के लिए बड़ा धारण नहीं कर सकता युग से सेकंड की संख्या (यूटीसी में 1 9 70 की शुरुआत) और अब। आपको 64-bit पूर्णांक की आवश्यकता है (long आदिम या Long ऑब्जेक्ट)।

java.time

अन्य उत्तर पुराने विरासत तिथि-समय वर्गों का उपयोग कर रहे हैं। उन्हें जावा.टाइम कक्षाओं द्वारा सप्लाई किया गया है।

Instant कक्षा में nanoseconds के एक प्रस्ताव के साथ समय रेखा पर एक पल का प्रतिनिधित्व करती है।

Instant now = instant.now() ; 

युग के बाद से आप मिलीसेकंड की संख्या के लिए पूछताछ कर सकते हैं। सावधान रहें इसका मतलब है डेटा का नुकसान, नैनोसेकंड को मिलीसेकंड में छिड़कना।

long millisecondsSinceEpoch = now.toEpochMilli() ; 

आप अवधि के बाद नैनोसेकंड की गिनती चाहते हैं, यदि आप गणित का एक सा करने की आवश्यकता होगी के रूप में वर्ग अजीब तरह से एक toEpochNano विधि का अभाव है। L को 64-बिट लंबे पूर्णांक के रूप में गणना को उत्तेजित करने के लिए अरबों में शामिल किया गया नोट करें। युग

के बाद से

long nanosecondsSinceEpoch = (instant.getEpochSecond() * 1_000_000_000L) + instant.getNano() ; 

पूरे सेकंड लेकिन प्रश्न के अंत में एक 10-अंकीय संख्या के लिए पूछता है। मुझे संदेह है कि 1 9 70-01-01T00: 00: 00 के युग के बाद पूरे सेकंड की गिनती का मतलब है। इसे आमतौर पर Unix Time या पॉज़िक्स टाइम के रूप में जाना जाता है।

हम इस संख्या के लिए Instant से पूछताछ कर सकते हैं। दोबारा, इसका मतलब यह है कि इस ऑब्जेक्ट में किसी भी अंश-दूसरे के छंटनी के साथ डेटा का नुकसान हो सकता है।

long secondsSinceEpoch = now.getEpochSecond() ; // The number of seconds from the Java epoch of 1970-01-01T00:00:00Z. 

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