2015-09-07 6 views
8

में SimpleDateFormat से दो बराबर दिनांकों को पुनः प्राप्त मैं मेरी समस्या को दिखाने के लिए इस स्निपेट बनाया:जावा

import java.text.SimpleDateFormat; 

public class Foo { 
    public static void main(String[] args) { 

     SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy"); 
     String date1 = "1412293500"; 
     String date2 = "1412336700"; 
     String dateString1 = formatter.format(Long.parseLong(date1 + "000")); 
     String dateString2 = formatter.format(Long.parseLong(date2 + "000")); 
     System.out.println(dateString1 + " " + dateString2); 

    } 
} 

date1 और date2 सेकंड में व्यक्त कर रहे हैं, इसलिए मैं उत्पादन में दो अलग-अलग तारीखों की उम्मीद कर रही है, लेकिन तिथि नहीं वही मुद्रित मैंने इस ऑनलाइन tool के अंदर चेक किया, और जैसा कि आप देख सकते हैं कि तिथियां दो अलग-अलग दिनों से संबंधित हैं।

मैं इसे कैसे हल कर सकता हूं?

+0

पहले, पोस्ट कोड है कि संकलित करता है। – hd1

+0

सबसे पहले, आपका कोड गलत है क्योंकि आपने var घोषणा में डेटा 2 लिखा था। वैसे भी यह सच है कि मेरे जेडएमएम प्रिंट आउट दिनांक 1: 45 01 03 10 2014 दिनांक 2: 45 01 03 10 2014 शायद यह एक निश्चित मूल्य –

उत्तर

8

आपके दो टाइमस्टैम्प के बीच का अंतर बिल्कुल 12 घंटे है।

hSimpleDateFormat में पहचानकर्ता AM/PM (1-12) में घंटे स्वरूपित करता है, इसलिए आप वास्तव में वास्तविक अंतर को आउटपुट नहीं करते हैं: दिनांक AM से PM तक स्थानांतरित किया गया था।

k या H पहचानकर्ता के साथ प्रयास करें जो दिन में (1-24) या (0-23) के रूप में स्वरूपित करता है।

SimpleDateFormat formatter = new SimpleDateFormat("mm kk dd MM yyyy"); 
String date1 = "1412293500"; 
String date2 = "1412336700"; 
String dateString1 = formatter.format(Long.parseLong(date1 + "000")); 
String dateString2 = formatter.format(Long.parseLong(date2 + "000")); 
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 45 13 03 10 2014 

आप कर सकते थे भी उत्पादन a पहचानकर्ता इस तरह के साथ AM/PM मार्कर:

SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy aa"); 
String date1 = "1412293500"; 
String date2 = "1412336700"; 
String dateString1 = formatter.format(Long.parseLong(date1 + "000")); 
String dateString2 = formatter.format(Long.parseLong(date2 + "000")); 
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 AM 45 01 03 10 2014 PM 
+1

'के' पर थोड़ा सा गूढ़ है। यह आमतौर पर 'एच' के साथ किया जाता है। – RealSkeptic

+0

(केके) प्रारूप (1-24) के लिए यह काम नहीं कर रहा है। – OiRc

4

ऐसा इसलिए है क्योंकि आपकी तिथियां 12h एपर्ट हैं और आप घंटे स्वरूपण के लिए निचले मामले 'एच' का उपयोग करते हैं। तिथियां क्रमश: 1 बजे और 1 बजे हैं। अपने आउटपुट में इसे देखने के लिए ऊपरी केस 'एच' या 'am/pm' मार्कर के प्रारूप में 'ए' जोड़ें।