2008-09-16 17 views
5

समझ में नहीं आता क्यों निम्नलिखित जगह लेता है:Date.getTime() समय सहित नहीं?

String date = "06-04-2007 07:05"; 
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm"); 
Date myDate = fmt.parse(date); 

System.out.println(myDate); //Mon Jun 04 07:05:00 EDT 2007 
long timestamp = myDate.getTime(); 
System.out.println(timestamp); //1180955100000 -- where are the milliseconds? 

// on the other hand... 

myDate = new Date(); 
System.out.println(myDate); //Tue Sep 16 13:02:44 EDT 2008 
timestamp = myDate.getTime(); 
System.out.println(timestamp); //1221584564703 -- why, oh, why? 
+0

कोई सेकंड नहीं है, क्योंकि आपने तिथि में कोई भी नहीं दिया है! –

+0

उहम, मैं उन्हें वहां देखता हूं, अंतिम तीन 0 है। आपने उन्हें 0 पर सेट कर दिया है। –

उत्तर

20

क्या मिलीसेकेंड? आप पहले उदाहरण में केवल कुछ मिनट की जानकारी प्रदान कर रहे हैं, जबकि आपका दूसरा उदाहरण सिस्टम से मिलीसेकंड के साथ वर्तमान तारीख को पकड़ता है, आप इसे क्या देख रहे हैं?

String date = "06-04-2007 07:05:00.999"; 
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss.S"); 
Date myDate = fmt.parse(date); 

System.out.println(myDate); 
long timestamp = myDate.getTime(); 
System.out.println(timestamp); 
+0

कोई सेकंड या मिनट या घंटे नहीं हैं! getTime() समय 00:00:00 से तारीख का प्रतिनिधित्व करने वाला केवल लंबा पूर्णांक देता है। सेकेंड पार्स करने की कोई संभावना नहीं है: वे मेरे डेटा में बस मौजूद नहीं हैं। =) – Jake

+1

यदि आपने अपना संदेह हल नहीं किया है तो आप अपने वास्तविक कोड और नमूना डेटा के साथ एक नया प्रश्न क्यों नहीं खोलते? मुझे लगता है कि आपकी समस्या कहीं और हो सकती है। –

+0

1180955100000 में एक घंटे और एक मिनट का घटक होता है जैसा कि अपेक्षित होगा। आपको विंको का जवाब स्वीकार करना चाहिए। – ScArcher2

2

ऊपर से सहमत हैं, तो कोई मिलीसेकंड नहीं होना चाहिए। । ।

2

क्योंकि आपके द्वारा निर्दिष्ट सरल दिनांक प्रारूप मिलीसेकंड को त्याग देता है। तो परिणामी दिनांक वस्तु में वह जानकारी नहीं है। तो जब आप इसे प्रिंट करते हैं, तो यह सब 0 है।

दूसरी ओर, जब आप इसे मिलीसेकंड के साथ मान निर्दिष्ट करते हैं तो दिनांक वस्तु मिलीसेकंड को बनाए रखती है (इस मामले में, नई तिथि() का उपयोग करके)। तो जब आप उन्हें प्रिंट करते हैं, तो इसमें मिलीसेक्स भी होते हैं।

0

जब आप किसी तारीख को पार्स करते हैं तो यह केवल आपके द्वारा प्रदान की जाने वाली जानकारी का उपयोग करता है। इस मामले में यह केवल MM-dd-yyyy एचएच: मिमी जानता है।

एक नई तिथि वस्तु बनाना वर्तमान प्रणाली दिनांक/समय (युग के बाद मिलीसेकंड की संख्या) देता है।

0

toString (एक तिथि वस्तु का) आप मिलीसेकेंड दिखाती है नहीं ... लेकिन वे वहाँ

इसलिए नए तारीख (कर रहे हैं) milisecond संकल्प के साथ एक वस्तु है, के रूप में द्वारा देखा जा सकता:

System.out.printf("ms = %d\n", myDate.getTime() % 1000) ; 

हालांकि, जब तुम SimpleDateFormat साथ अपनी तिथि का निर्माण, कोई मिलीसेकेंड इसे करने के लिए पारित कर रहे हैं

मैं यहाँ सवाल याद आ रही है?

[संपादित करें] Hahaha ... जिस तरह से बहुत धीमी गति से;)

0

Date.getTime मिलीसेकेंड की संख्या 1 जनवरी, 1970, 00:00:00 GMT दिनांक वस्तु का प्रतिनिधित्व करती क्योंकि देता है। तो "06-04-2007 07:05" - "01-01-1970 00:00" 1180 9 55340000 मिलीसेकंड के बराबर है। चूंकि आपके प्रश्न की एकमात्र चिंता तिथि के समय के हिस्से के बारे में है, इस गणना के बारे में सोचने का एक मोटा तरीका 07:05 और 00:00 के बीच मिलीसेकंड की संख्या है जो 25500000 है। यह किसी भी समय 1000 से समान रूप से विभाजित नहीं है कोई मिलीसेकंड है।

दूसरी तारीख में यह वर्तमान समय का उपयोग करता है जब कोड की उस पंक्ति को निष्पादित किया जाता है। वह वर्तमान में जो भी मौजूदा मिलीसेकंड की गणना करेगा, वह गणना में होगा। इसलिए, Date.getTime से अधिक होने की संभावना एक संख्या है कि समान रूप से से 1000

0

Date की getTime() विधि 1 जनवरी, 1970 के बाद से मिलीसेकेंड की संख्या देता है विभाज्य नहीं है वापस आ जाएगी (इस तिथि "युग" सभी क्योंकि कहा जाता है कंप्यूटर तिथियां इस तारीख से दूर हैं)। यह आपकी तिथि का मानव-पठनीय संस्करण प्रदर्शित करने के लिए उपयोग किया जाना चाहिए।

इसके बजाय SimpleDateFormat.format() विधि का उपयोग करें।यहाँ मैं आपकी समस्या का समाधान हो सकता है लगता है कि अपने कोड का हिस्सा की एक संशोधित संस्करण है:

String date = "06-04-2007 07:05:23:123"; 
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss:S"); 
Date myDate = fmt.parse(date); 

System.out.println(myDate); //Mon Jun 04 07:05:23 EDT 2007 
String formattedDate = fmt.format(myDate); 
System.out.println(formattedDate); //06-04-2007 07:05:23:123 
2
इसके बजाय सूर्य JDK समय/दिनांक पुस्तकालयों (जो छोड़ वांछित होने के लिए बहुत) मैं http://joda-time.sourceforge.net पर देखने की अनुशंसा का उपयोग करने का

यह एक बहुत परिपक्व और सक्रिय स्रोत फोर्ज परियोजना है और इसमें एक बहुत ही सुरुचिपूर्ण एपीआई है।

0
import java.util.*; 

public class Time { 
    public static void main(String[] args) { 
     Long l = 0L; 
     Calendar c = Calendar.getInstance(); 
     //milli sec part of current time 
     l = c.getTimeInMillis() % 1000; 
     //current time without millisec 
     StringBuffer sb = new StringBuffer(c.getTime().toString()); 
     //millisec in string 
     String s = ":" + l.toString(); 
     //insert at right place 
     sb.insert(19, s); 
     //ENJOY 
     System.out.println(sb); 
    } 
} 
संबंधित मुद्दे