2012-04-09 12 views
11

मेरे पास कॉलम में एक मान है जो टाइपस्टैम्प प्रकार है। कहते हैं कि मैं एक मूल्य देता है 2007/05/04 08: 48: 40,969774सेकेंड के लिए परिशुद्धता के 6 अंकों तक समय प्रिंट करने के लिए कैसे करें

अब, जब डेटाबेस से मूल्य लाने और एक समारोह है, मैं इतना है कि क्या SimpleDateFormatter पैटर्न का उपयोग करना चाहिए करने के लिए इस टाइमस्टैम्प मान देने के लिए कोशिश कर रहा है सेकेंड के बगल में अंश भाग भी वापस आ जाता है।

मैं yyyy-MM-dd hh का इस्तेमाल किया है: mm: ss, लेकिन यह केवल कुछ सेकंड तक वापस आती है और अंश सेकंड (0.९,६९,७७४) के बगल में वर्तमान पर ध्यान नहीं देता। मुझे 6-अंकों की सटीकता के साथ, इस अंश भाग को वापस करने में सहायता चाहिए।

+2

दस्तावेज़ीकरण पर एक नज़र डालें: http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html। वहाँ प्रारूप विनिर्देशों की एक सूची है। –

+1

जो भी समझाने की देखभाल करता है क्यों? सवाल के साथ कुछ भी गलत नहीं है। जावा में लाखों दूसरी परिशुद्धता प्राप्त करना संभव है। –

+2

+1 मुझे लगता है कि यह एक उचित सवाल है। मुझे लगता है कि डाउनवॉटर को एहसास नहीं हुआ कि माइक्रो-सेकेंड से निपटना ए) छोटा नहीं है या बी) काफी संभव है। –

उत्तर

6

java.util.Date (या java.sql.Timestamp) स्वरूपण के डिफ़ॉल्ट तरीके केवल मिलीसेकंद परिशुद्धता है। आप मिलीसेकंद परिशुद्धता प्राप्त करने के लिए yyyy-MM-dd hh:mm:ss.SSS का उपयोग कर सकते हैं।

java.sql.Timestamp वास्तव में (ऊपर) नैनोसेकंद परिशुद्धता (डेटाबेस सर्वर और चालक वास्तव में इसका समर्थन करता है) है। जावा 8 में इसे प्रारूपित करने का सबसे आसान तरीका टाइमस्टैम्प को java.time.LocalDateTime (Timestamp.toLocalDateTime() का उपयोग करके) में परिवर्तित करना है और java.time.format.DateTimeFormatter में java.time प्रारूपण विकल्प का उपयोग करना है जो नैनोसेकंड तक समर्थन करता है।

यदि आप जावा 7 या इससे पहले का उपयोग करते हैं तो यह कुछ अतिरिक्त प्रयास करेगा, क्योंकि सामान्य दिनांक स्वरूपक इसका समर्थन नहीं करते हैं। उदाहरण के लिए आप पैटर्न yyyy-MM-dd hh:mm:ss (केवल सेकंड तक प्रारूपित करने के लिए) के साथ डेटफॉर्मर का उपयोग कर सकते हैं और Timestamp.getNanos() के उप-दूसरे नैनो सेकंड (उपयुक्त शून्य-पैडिंग के साथ) जोड़ सकते हैं।

+0

सही पर एक नज़र डालें, मैंने इसे एसएसएस के साथ आजमाया अंत और मैं इसे मिलीसेकंद परिशुद्धता तक प्राप्त कर रहा हूं। लेकिन मैं लाखवां-दूसरी परिशुद्धता चाहता हूं। कोई सुझाव? सबसे पहले, क्या जावा के साथ यह संभव है –

2

आपको माइक्रो-सेकंड टाइमस्टैम्प प्राप्त करने का एक तरीका होना चाहिए। मैं System.currentTimeMillis() का उपयोग System.nanoTime() संयोजन में करता हूं। फिर आपको इसे प्रदर्शित करने के लिए एक तरीका चाहिए। आप इसे 1000 से विभाजित कर सकते हैं और मिलीसेकंड को सामान्य के रूप में प्रदर्शित कर सकते हैं, फिर उस समय के अंतिम 3 अंक प्रदर्शित कर सकते हैं। यानी एक समय जो है

long timeUS = System.currentTimeMillis() * 1000 + micros; 
यहाँ

एक अधिक विस्तृत उदाहरण है

HiresTimer.java और HiresTimerTest.java

परीक्षण प्रिंट

2012/04/09T14:22:13.656008 
2012/04/09T14:22:13.656840 
2012/04/09T14:22:13.656958 
2012/04/09T14:22:13.657066 
.... 
2012/04/09T14:22:13.665249 
2012/04/09T14:22:13.665392 
2012/04/09T14:22:13.665473 
2012/04/09T14:22:13.665581 

संपादित की तरह है: प्रासंगिक कोड है

private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy/MM/dd'T'HH:mm:ss.SSS"); 
private static final DecimalFormat DF = new DecimalFormat("000"); 

public static String toString(long timeUS) { 
    return SDF.format(timeUS/1000) + DF.format(timeUS % 1000); 
} 
+7

'System.nanoTime()' एक मान वापस नहीं करता है जिसका पूर्ण समय से कोई सहसंबंध है। यह केवल 'System.nanoTime() 'के दो आमंत्रणों के बीच विलुप्त समय को मापने के लिए उपयोगी है। http://stackoverflow.com/q/1712205/260633 – Dev

+0

और यह वर्तमान टाइममिलिस से विलंब समय को माप सकता है जिसका अर्थ है कि आप एक उचित विचार कर सकते हैं कि माइक्रो-सेकंड क्या हैं। –

+0

'System.nanoTime()' सिस्टम.नानोटाइम() 'के अंतिम कॉल के बाद विलुप्त समय को छोड़कर कुछ भी माप नहीं सकता है। युग अपरिभाषित है। तो यह खुद की तुलना में केवल उपयोगी है। – Dev

1

जावा में नैनोसेकंड से निपटना तुच्छ नहीं है। मैं (SimpleDateFormat साथ प्रारूप दिनांक और समय और DecimalFormat साथ नैनोसेकंड) किसी भी सुरुचिपूर्ण एक अलग तरह से उन लोगों के साथ निपटने के अलावा अन्य समाधान नहीं देखते हैं, जैसे कि निम्न उदाहरण में उदाहरण के लिए, कर सकते हैं:

 

package test; 

import java.sql.Timestamp; 
import java.text.DateFormat; 
import java.text.DecimalFormat; 
import java.text.NumberFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 


public class Main { 

    public static void main(String[] args) { 
    Main m = new Main(); 
    m.start(); 
    } 

    private void start() { 
    long time = System.currentTimeMillis(); 
    Date d = new Date(time); 
    Timestamp t = new Timestamp(time); 
    t.setNanos(123456789); 
    System.out.println(d); 
    System.out.println(t); 
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'.'"); 
    NumberFormat nf = new DecimalFormat("000000000"); 
    System.out.println(df.format(t.getTime()) + nf.format(t.getNanos())); 
    } 
} 
 

उत्पादन का उत्पादन किया है (में अपने देश, मेरे स्थान):

 
Mon Apr 09 16:27:27 CEST 2012 
2012-04-09 16:27:27.123456789 
2012-04-09 16:27:27.123456789 
+0

समस्या यह है कि माइक्रो/नैनो-सेकंड हमेशा शून्य होते हैं। –

+0

मुझे लगता है कि वे डेटाबेस सबसिस्टम (प्रश्न के अनुसार) द्वारा सेट किया जा सकता है। मैंने यह दिखाने के लिए कोड संपादित किया कि ... –

+0

दरअसल, प्रश्न माइक्रोसॉन्ड के बारे में नैनोसेकंड नहीं था। –

2

जावा 8 में और बाद में, java.time पैकेज पार्स और सटीक nanosecond के लिए दिनांक/बार जोड़ तोड़ के लिए समर्थन हासिल है। इसका मतलब है कि एक सेकंड के अंश में 9 अंक तक।

+1

क्या आप प्रदान कर सकते हैं और उदाहरण दे सकते हैं? – Jason

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

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