2011-01-20 9 views
8

मुझे लम्बी गेटिलिस (डेट एडेट) जैसी फ़ंक्शन चाहिए;जावा से बाहर मिलीमिलीकंड() प्राप्त करें

जो दिनांक दूसरे के मिलीसेकंड देता है। मैं योड, सिंपलडेटफॉर्मैट या अन्य पुस्तकालयों का उपयोग नहीं कर सकता क्योंकि यह gwt कोड है।

मेरे वर्तमान समाधान date.getTime() % 1000

वहाँ एक बेहतर तरीका क्या कर रहा है है?

+6

आपके वर्तमान समाधान में क्या गड़बड़ है? मुझे ठीक लगता है। – spender

+0

जैसा मैंने किया था वैसा ही करूंगा। यह काम करने का एक सुंदर प्राकृतिक तरीका लगता है। मैं 100% निश्चित नहीं हूं, लेकिन कंप्यूटर की घड़ी परिशुद्धता भिन्न हो सकती है (इसलिए आपको सभी परिस्थितियों में द्वि-एमएस ग्रैन्युलरिटी नहीं हो सकती है। – Romain

+1

@ हैरी यह जावास्क्रिप्ट – marcog

उत्तर

6

पीटर Lawrey द्वारा बताया के रूप में, सामान्य रूप में आप जावा में एक "अजीब" रास्ते में

int n = (int) (date.getTime() % 1000); 
return n<0 ? n+1000 : n; 

की तरह कुछ % काम करता है के बाद से की जरूरत है। मैं इसे अजीब कहता हूं, क्योंकि हमेशा परिणाम को कभी-कभी ऋणात्मक नतीजे मिलने के बजाए किसी दिए गए रेंज (यहां: 0..9 99) में गिरने की आवश्यकता होती है। दुर्भाग्यवश, यह अधिकांश CPUs और अधिकांश भाषाओं में इस तरह से काम करता है, इसलिए हमें इसके साथ रहना होगा।

+1

जावा में% "अजीब" कैसा है? यह बहुत मानक आईएमओ है ... – Romain

+0

अजीब होने के बारे में हटाया गया कथन: "%" । रोलबैक अगर आप वास्तव में यह कहना चाहते हैं। – jzd

+0

सहमत: यह मानक है। हालांकि, मानक टूट गया है, क्योंकि ऋणात्मक संख्याओं के लिए यह शायद ही कभी करता है जो आपको चाहिए। इस सवाल को एक उदाहरण के रूप में लें जहां आपको परिणाम 0.9 99 में हमेशा गिरने के परिणाम की आवश्यकता है। क्या कोई ऐसा उदाहरण है जहां आपको नकारात्मक नतीजे की आवश्यकता है? मुझे शक है। – maaartinus

3

ऊपर की कोशिश की और अप्रत्याशित व्यवहार मिला जब तक कि मैंने 1000 के साथ लंबे समय तक मोड का उपयोग नहीं किया।

int n = (int) (date.getTime() % 1000l); 
return n<0 ? n+1000 : n; 
+1

क्या आपके पास इसका असफल होने का एक उदाहरण है? – rogerdpack

0

tl; डॉ

aDate.toInstant() 
    .toEpochMilli() 

java.time

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

Instant instant = Instant.now(); // Capture current moment in UTC. 

1970-01-01T00:00:00Z की अवधि के बाद मिलीसेकेंड की अपनी गिनती निकालें।

परिवर्तित

आप एक java.util.Date वस्तु पारित कर रहे हैं, तो java.time में बदलने का। पुराने वर्गों में जोड़े गए नए तरीकों को कॉल करें।

Instant instant = myJavaUtilDate.toInstant() ; 
long millis = instant.toEpochMilli() ; 
संबंधित मुद्दे